逗号运算符,优先级别在C语言中处于最低的位置,它将两个及其以上的式子连接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
首先看逗号表达式(a=3*5,a*4),a+15
这个表达式也是很常见,在网上也可以找到解析,首先是执行a=3*5,然后表达式就变成了(15,a*4),a+15,然后是执行a*4,a*4的结果是60,表达式就变成了(15,60),a+15,此时a的值是没有发生改变的,所以执行a+15之后,最终表达式就是(15,60),30,对于逗号表达式的值取最右边的结果,所以整个逗号表达式的取值就是30.
下面我们来对比这两条语句:
1.b=(a=3*5,a*4),a+15;
2.b=((a=3*5,a*4),a+15);
#include<stdio.h>
int main(){
int a,b;
b=(a=3*5,a*4),a+15;
printf("a=%d,b=%d\n",a,b);
return 0;
}
运行结果:a=15,b=60
#include<stdio.h>
int main(){
int a,b;
b=((a=3*5,a*4),a+15);
printf("a=%d,b=%d\n",a,b);
return 0;
}
运行结果:a=15,b=30
对比两个代码的运行结果,首先第二个程序和我们之前所解释的一样,然后我们再看第一个程序的b=(a=3*5,a*4),a+15,所执行就应该是b=(15,60),30,然后先执行赋值语句,结果就是60,30,最终b的输出是60
然后我们再来看下面个程序:
#include<stdio.h>
int main(){
int a=1,b=2,c;
c=a,b=3;
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
运行结果:a=1,b=3,c=1
这个输出当然是显然易见的,那这个就到这结束了,然后我之所以写这篇文章,主要还是想记录一下,因为当时我忘记逗号运算符的优先级低于赋值运算符,然后当时代码变量也比这个复杂,一时间没看出来,大概就是以为执行是先c=a,3,然后把3的值给c,然后运行结果应该是a=1,b=3,c=3,我当时验证的方法是把c=a,b=3加上一个括号变成c=(a,b=3)发现两者的运行结果不一样,反而和c=a;b=3的结果是一样的,我就感觉和疑惑,还写了一下a=1,1+2;发现程序报错,然后加上括号变成a=(1,1+2)发现程序又可以运行,然后再网上貌似没有找到解析,可能也是太简单了,不过当时因为变量有点复杂一时间没有看出来,这写一下思路,把变量换简单一点,貌似确实是这么回事。
这是本人第一次写博客,主要还是想记录一下自己的思路什么的,当然确实写的不怎么好,不过也希望可以帮助的大家