C大约有40个运算符
一、sizeof运算符和size_t运算符
sizeof运算符:以字节为单位返回其操作数大小;操作数可以是一个具体的数据对象(如一个变量名)或者一个类型(如float);如果数据对象是一个类型,必须被括在圆括号中
C有一个typedef机制,允许为一个已有的类型创建一个别名
size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数,C的头文件系统可以使用typedef使size_t在系统中作为unsigned int或unsigned long的同义词
二、取模运算符(modulus operation):%
功能:用于整数运算,计算其右边的整数除其左边的整数得到的余数
对浮点数使用取模运算符是无效的
负数取模(C99标准):如果第一个操作数为负数,得到的模为负数;如果第一个操作数为整数,得到的模为正数
三、增量和减量运算符:++和--
1. 增量运算
增量运算符:将其操作数的值增加1
两种方式:前缀(运算符出现在操作数之前)和后缀(运算符出现在操作数之后);两种方式的区别在于值的增加这一地址发生的时间不同
示例代码:
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 0;
int c, d;
c = a++;
d = ++b;
printf("The value of c is %d \n", c);
printf("The value of d is %d \n", d);
return 0;
}
运行结果:
实际中要慎重选择前缀或后缀,因为得到的结果可能不同
b = ++i; // 如果使用i++会有不同结果
//可以使用下面的代码进行替代:
++i;
b = i; // 上一行使用++i或i++均不会影响计算结果
增量运算和减量运算可以帮助精简代码,让程序看起来更简洁,有助于产生更高效的机器代码;缺点是可能会让代码变得难以理解
2. 减量运算
每种形式的增量运算符都有一种形式的减量运算符与之对应(即前缀和后缀两种形式)
3. 增量和减量运算符的优先级
增量和减量运算符具有很好的结合优先级,只有圆括号比它们的优先级高
增量运算符和减量运算符只能影响一个变量
4. 注意事项
为了防止出错,不要一次使用太多的增量运算符
C中,编译器可以选择先计算函数中哪个参数的值,这个自由提高了编译器的效率,但是如果在函数参数中使用了增量运算符就会有麻烦,如:
printf("%10f %10d\n", num, num*num++);
又如:
res = num / 2 + 5 * (1 + num++);
编译器有可能不会按照程序员所希望的顺序进行具体的操作,结果是不确定的,C标准没有定义结果将会是什么,使用不同的编译器可能会出现不同的结果
两个基本的原则可以避免此问题
1)如果一个变量出现在同一个函数的多个参数中时,不要将增量运算符和减量预算符用于其上面
2)当一个变量多次出现在一个表达式中时,不要将增量运算符和减量运算符用于其上面
本质上还是编程习惯的问题,养成规范的习惯,可以在很多地方少犯不必要的错误