零基础学C语言——表达式和语句

发布时间:2023年12月22日

这是一个C语言系列文章,如果是初学者的话,建议先行阅读之前的文章。笔者也会按照章节顺序发布。

在这里插入图片描述
在上一篇的示例中其实出现过很多表达式和语句,例如:

int a = 1 + 2;

其中,1 + 2是一个表达式, a = 1 + 2也是一个表达式, 而整个这句则是一个语句。

表达式

**表达式是一种由运算符和操作数组成的结构。**下面我们看一些表达式例子:

1 + 2 //加号为加法运算符,1和2为加法运算符相关的操作数

2 >> 1 //>>为右移运算符,2和1为运算符相关的操作数

func(1,2) //这是一个函数调用,初学者可以暂时不考虑什么是函数,我们将在后面介绍
//在这个例子中,可以将函数名与()看作运算符,而括号内的数为操作数。
//大家可以回看上一篇中运算符表中的括号运算符的使用形式。

每一个表达式都有一个表达式值

例如1 + 2,我们都知道等于3,3就是这个加法表达式的值。

再例如2 >> 1,我们也知道等于1,1就是这个右移表达式的值。

最后看下func(1,2)这样的表达式,它的值是函数func的返回值,初学者不必纠结于此。

上一篇我们介绍的运算符中有一个自加和自减的运算符,我们来看下例子:

int a = 10;
//下面这四个表达式的值和变量a的值分别是多少呢
++a //a的值11,表达式值11
a++ //a的值11,表达式值10
--a //a的值9,表达式值9
a-- //a的值9,表达式值10

可以看到,凡是自加/自减运算符在前的,a的值和表达式的值都是经过运算后的值,而运算符在后的,a的值是运算后的值,表达式的值则是运算前的值。

再来看一个上一篇的例子:

int a = (1,2,3);

其实,逗号运算符表达式中每一个被逗号隔开的部分都是一个子表达式,即:

int a = (1+2, 3+4, 5+6);

是完全符合语法要求的,而逗号表达式的值是最后一个子表达式的值(逗号运算符结合方向为左到右,所以是最右侧的),即11。

语句

语句是C语言中的基本组成元素,一个C语言程序的源码必然是由语句组成的。

语句的形式有很多种,大致分为:

  1. 表达式语句
  2. 变量定义/声明语句
  3. 函数定义/声明语句
  4. 结构体定义/声明语句
  5. 共同体定义/声明语句
  6. 枚举定义/声明语句
  7. 类型定义/声明语句
  8. 循环控制语句

初学者对上面未听说过的内容不必纠结,我们后面会逐个专门介绍,这里只是进行一个汇总。

上面这8类中,除函数和循环控制类语句以外,其余均以分号做结尾的。

其中声明是告知编译器,这个变量、函数、结构体等在本文件内或者其他文件内有定义。

下面给出每种语句的一个样例,我们主要看表达式语句、变量相关语句,其余的粗略了解即可。

  • 表达式语句
a = 1; //a=1是由赋值运算符组成的赋值表达式,在表达式后加一个分号,就变成了赋值语句。

a = 1 + 2; //1+2是加法运算符组成的加法表达式,其优先级高于赋值运算符,所以先计算加法
//加法表达式的值为3,然后是由等号组成的赋值表达式,表达式的值为3(即等号右侧表达式的值)。
//最后,在赋值表达式后增加一个分号,变成一条语句。

a = b = 1; //由于赋值表达式也有表达式值,因此可以使用这种写法同时给变量a和变量b赋值,他们的值都是1。
  • 变量定义/声明语句
int a; //最基本的变量定义语句,并未给a赋初始值。
//定义语句包含了变量的类型、变量名和分号。

int a = 1;//增加了赋值表达式,给变量定义语句中的变量赋初始值。

static int a = 1; //static在此表示静态变量,后面章节我们会介绍到

int a; //声明变量a与定义写法一致

static int a; //声明本地变量a

extern int a; //声明外部变量a
  • 函数定义/声明语句
int foo (int arg1, char arg2)
{
  //...
  return 0;
}
//定义返回值为整型的函数foo,且函数有两个参数——整型arg1和字符型arg2

int foo (int arg1, char arg2);//与定义类似,但是省略{}及其内容,并用分号结尾

int foo (int, char); //函数声明可省略参数名

static int foo (int, char); //声明本地函数

extern int foo (int, char); //声明外部函数
  • 结构体定义/声明语句
struct person {
  char name[256];
  int age;
};
//定义名为person的结构体,其中包含字符型数组name和整型变量age

static struct person; //声明本地结构体person

extern struct person; //声明外部结构体person
  • 共同体定义/声明语句
union volunteer {
  struct person john;
  struct person susan;
};
//定义名为volunteer的共同体,其中包含两个struct person对象john和susan。共同体中只能操作其中一个成员
  • 枚举定义/声明语句
enum identity {
    teach,
    student
};
//定义名为identity的枚举类型,其中含有teach和student成员。

static enum identity;
  • 类型定义/声明语句
typedef struct person person_t; //定义类型person_t,其类型等价于结构体struct person

static person_t; //声明本地类型person_t

extern person_t; //声明外部类型person_t
  • 循环与控制语句
for (i = 0; i < 10; ++i) {
  //...
}//for循环语句

while (i < 10) {
  //...
}//while 循环语句

do {
  //...
} while (i < 3);//do-while循环语句

switch (c) {
  case 'a':
    //...
    break;
  case 'b':
    //...
    break;
  default:
    //...
    break;
}//switch语句

if (i < 10) {
  //...
} else {
  //...
}//if-else语句

忽略本小节内容并不影响后续C语言的学习和使用。



喜欢的读者可以关注码哥,也可以在下方留言评论,如果有不清楚的地方也可以私信码哥,我会第一时间回复。
感谢阅读!
文章来源:https://blog.csdn.net/weixin_40960130/article/details/135147735
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。