1. b++运算
int a = 0; int b = 1; a = b++ + b++;
printf("a=%d ",a);
printf("b=%d ",b);
输出结果:
a=3
b=3
运算过程 : (b++的运算是先运算, 后自加)
(1) . 先把第一个b++看成 x=b++ , 则 x=1,b=2 ; 第二个 b++ 看成 y=b++ , y=2, b=3
(2) . a=x+y a=3
2 . ++b运算
int a = 0; int b = 1; a = ++b + ++b; printf("a=%d ",a); printf("b=%d ",b);
输出结果:
a=6
b=3
运算过程: (++b操作先自加, 后运算)
(1) . 把第一个 ++b 后 b=2 ; 第二个 ++b 后 , b=3 , 因为式子 ++b同优先级所以 , 式子 ++b 的结果是3 , 所以a=6
扩展 : a = ++b + ++b + ++b;
计算过程:
首先运算符 + 是双目运算符 , 则只能先计算前两个 ++b 的内容 有了前两个的结果 , 在结合后面的 + ++b
3. ++运算结合三目运算符
例子1
int main(int argc, char** argv) { int x, y = 25; x = 70; y = x++ > 70 ? 100 : 0; printf("x=%d y=%d ",x,y); return 0; }
输出结果:
x=71 y=0
运算过程:
(1) . 式子 x++ 的值是 70 , 然后x自加 x=71
(2) . x++ > 70运算是错误的,所以y=0
例子2
int x=10,y=9; int a,b,c; a = (--x==y++) ? --x : ++y; b=x++; c=y;
运算结果: a=8, b=8, c=10
运算过程:
(1) . 首先判断 ( --x == y++ ) 式子 --x 的值是 9 , 式子 y++ 的值是 9 , x=9 , 有= 10, 这个判断是正确的
(2) . 判断式子正确 会执行 ? 后的 --x , x=8
(3) . 式子 x++ 是先赋值 x 的值 , 在进行 x 自加 1
例子:
#include <stdio.h> #define pro(x) (x*x) int main(int argc, const char *argv[]) { int i=3,j,k; j = pro(i++); // j = i++ * i++ k = pro(++i); // k = ++i * ++i printf("j=%d k=%d ",j,k); return 0; } // j=12 k=49
4 . 逗号运算符
float x=10.5, y=1.8, z=0;
z = (x=5, y = 6, x+y); z赋值为 11 , x赋值为 5 , y赋值为6
z = x=5, y = 6, x+y 这个式子的结果为11 , x 为5 , z 为 5 , y 为 6
5 . sizeof() 运算符 sizeof(<类型或变量名>)
求所占的字节数
char buf[] = "hello"; sizeof(buf) 结果为6 , 字符串hello结尾有一个
char buff[10] = "hello"; sizeof(buff) 结果为10 数组的长度固定为10 个字节
char *p = 0; sizeof(p); 结果为 4 , 32位机上指针的占4个字节
sizeof(char); 结果为1, char类型占一个字节