逗号运算符
逗号运算符是所有运算符中级别最低的,遇到逗号运算符表示运算结束;
int i=0;
int j=(i++,i++,i++);
printf("i=%d,j=%d\n", i,j);//i=3,j=2;i++遇;才算结束
i=0;
int k=(i++)+(i++)+(i++);
printf("i=%d,k=%d\n", i,k);//i=3,k=0
int a=10;
int b;
int num = (a = 19, b = 10, a + 1);
printf("a=%d,b=%d,num=%d\n", a,b,num);//a=19,b=10,num=20
逗号表达式
这种类型的运算符成为逗号表达式,又称为“顺序求值运算符”。
int a=10;
a = 3 * 5, a * 4;
printf("%d\n", a);//15;把a = 3 * 5作为一个整体,是一个赋值语句;后面a * 4是另外一个语句;
a=10;
printf("%d\n", (a = 3 * 5, a * 4));//60;括号内是一个整体,它的值是最后一个表达式的值,先运行得出a=15,后运算15*4=60;
a=10;
printf("%d\n", a = 3 * 5, a * 4);//15;这里的逗号是作为参数的分隔作用,a=15,后面的a * 4没有打印;
a=10;
printf("%d,%d\n", a = 3 * 5, a * 4);//15,40;
这个涉及到参数求值顺序的问题,有的编译器是从左到右求值,你的编译器是从右到左求值的;
我的编译器是从右到左求值的,所以打印出上面的值。
a=10;
printf("%d,%d\n", a * 4, a = 3 * 5);//60,15;交换顺序后就能确认是从右到左求值的;
扩展
1、
int m=6;
if(m++ > 6) 在if括号后语句结束,里面的m++会自加然后m值为7,括号内的m值还是为6。
2、下面打印出什么?
int a[3][2]={(0,1),(2,3),(4,5)};
int *p=a[0];
printf("%d",p[0]);
打印出1,因为是逗号表达式,所以二维数组a的排列是:1,3,5,0,0,0; 所以打印出1。