菜鸡自学
C语言中,逗号运算符的优先级最低。
int a;
int b;
a = 3;
b=++a,4-2,a+5; //优先级
printf("b1= %d\n",b); // b=++a=4;
a = 3; //a值重新赋回来
b=(++a,4-2,a+5); //结合性
printf("b2= %d\n",b); // b=((++a)+5)=9;
return 0;
第一个b,后面赋值表达式中,自加“++”的优先级高于,逗号的优先级,所以给b赋值为++a 为4 。
第二个b,后面有带括号的逗号运算符,所以要自左至右的计算各个表达式的值,但是赋值给b的值,是整个逗号表达式的值,即为最后一个表达式的值a+5,为b=((++a)+5)=9。
不妨考虑一下a在运算后取值是多少?
int a;
int b;
a = 3;
b=++a,4-2,a+5,a*4,a++; //优先级
printf("b1= %d.a= %d\n",b,a);
// b=++a=4,a=++a再a++等于5;
a = 3; //a值重新赋回来
b=(++a,4-2,a*2,a+5,a-1); //结合性
printf("b2= %d.a= %d\n",b,a);
// b=((++a)-1)=3,a=++a等于4;
考虑优先级的同时,还有区别a++和++a两种情况
a = 3;
b=a++,4-2,a+5,a*4,a++; //优先级
printf("b1= %d.a= %d\n",b,a);
//b=a++既a自增前的数值3
a = 3;
b=++a,4-2,a+5,a*4,a++; //优先级
printf("b1= %d.a= %d\n",b,a);
// b=++a,既a自增后的数值4
运算符优先级