本文主要讨论C语言中的运算符、表达式和语句,其中还讨论到一些重点的内容,如类型转换、自动类型转换和强制类型转换,以及C语言函数的正确使用方式。
一、C语言运算符
1、基本运算符
C语言的基本运算符如下所示:
运算符 | 说明 |
赋值运算符= |
数据对象:存储值的数据区域 左值:标识数据对象的名称 将值赋给数据对象 |
加法运算符+ | 两个数据对象之间的加法运算 |
减法运算符- | 两个数据对象之间的减法运算 |
除法运算符/ |
除法运算 正整数除法:舍弃小数部分 负整数除法:向0靠近 浮点数除法:保留小数部分 |
乘法运算符* | 两个数据对象之间的乘法运算 |
C语言运算符优先级如下:
运算符 | 结合律 |
一元加减法运算符+- | 从右到左边 |
乘除法运算符*/ | 从左边到右边 |
二元加减法运算符+- | 从左边到右边 |
赋值运算符= | 从右到左边 |
() | 从左边到右边 |
使用运算符实例代码如下:
int basic = 45; // 使用赋值运算符
int current = 80;
printf("+: %-10d-: %-10d\n", current + basic, current - basic); // 使用加法、减法运算符
int width = 400;
int height = 800;
float rgb = 18.9f;
printf("*: %-10d\\: %-10f\n", width * height, rgb / width); // 使用乘法、除法运算符
2、其它运算符
运算符 | 说明 |
sizeof运算符 |
1、用于计算数据对象的大小,包括计算变量和类型的大小,返回类型为size_t。 2、typedef用于创建类型别名,size_t的定义类似: typedef unsigned int size_t 3、size_t编译器根据系统的不同替换相应的标准类型 |
求模运算符% | 取余 |
递增运算符++ |
分为前自增和后自增,两者的区别主要体现在表达式多个变量的运算中: 1、前自增++var,var先加1再进行表达式运算 2、后自增var++,先进行表达式运算,后再加1 |
递减运算符– | 分为前自减–var和后自减var–,类似递增运算符 |
强制类型运算符() | 强制转换类型 |
其中类型转换分为自动类型转换和强制类型转换:
1、自动类型转换:主要发生在混合类型计算的情况下,如果是表达式运算,进行升级类型转换,如char short转为int或者unsigned
int,在表达式运算中都是较小类型转为较大类型。
如果是两种类型的运算,分别转换成两种类型的更高级别类型。
如果是函数参数传递,float转为double运算,char或short转为int。
如果是赋值语句,有可能会强制降级,主要看左值的数据类型是否低于右边值的数据类型。
自动类型转换一般不太安全,在开发中尽量使用相同类型进行运算,或者使用枪支类型转换。
2、强制类型转换:使用强制类型运算符(),例如(int)3.14,将浮点数3.14强制转为int类型,转化后的值为3。
使用运算符实例代码如下:
// 1、sizeof运算符
size_t size = sizeof(float); // sizeof运算符,返回float类似的大小
printf("size: %10u\n", size); // => 4
// 2、%取模运算符
int mod = 8%3; // %取模运算符,返回8除以3的余数
printf(" mod: %10d\n", mod); // => 2
// 3、自增自减运算符
int value = 3;
// 在不参与多个变量表达式的运算中,前后自增或自减没什么区别
value++;
value--;
++value;
--value;
printf(" val: %10d\n", value);// => 3
// 参与其它变量的表达式运算,前自增自减和后自增自减的效果不同
int number = ++value; // 前自增,先自增后表达式运算,此时value的值为4
printf(" num: %10d\n", number); // => 4
number = value++; // 后自增,value先参与表达式运算,后自增,value的值为5,value赋给number的是4
printf("value: %-10d number: %-10d\n", value, number); // => 5 4
// 4、()强制类型运算符
float pi = 3.14;
int PI = (int)pi;
printf("%d\n", PI); // => 3
二、表达式和语句
表达式由运算符和数据对象组成,例如a+b是一个表达式,表达式后加分号成为表达式语句,注意变量或函数声明不是语句,在C语言中它仅仅是一个声明,语句是C程序的最基本单元,常见的语句有赋值表达式语句var = 4,函数表达式语句,例如调用printf函数,空语句一个分号。符合语句块由一对花括号括起来,包含一条或多条语句。
注:C语言其中有两个专有名词,副作用和序列点,副作用的意思是对数据对象或文件的修改,序列点是程序的执行点,以及完整的表达式的结束。(不用太关系这个,不大影响编程)
在C语言中语句主要集中在函数或其它一些语句块中,C语言函数的标准使用:首先需要进行函数原型的声明,然后进行函数定义实现,在项目开发中,函数原型声明一般放在自定义.h头文件中,函数实现放在.c源文件中。
C语言语句和函数的代码实例如下:
// 函数原型声明
void run(char *message);
int main() {
char *message = "shall we talk"; // 赋值语句
if(strlen(message) > 4){ // 比较表达式
run(message); // 调用函数语句
}
return 0;
}
// 函数实现
void run(char *message){
printf("running: %s\n", message); // 调用函数语句
}