逗号表达式:是C语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,①从左往右逐个计算表达式,②整个表达式的值为最后一个表达式的值。
——百度百科
如果令x的初始值为1的话,++x与x++最终结果都是2,但在其过程中会有较大差异。(--x与x++同理)
在过程中:
++x是2(x位于++后是加完之后),过程中是2。
x++是1(x位于++前是加完之前),过程中是1。
我是这么记忆的,一下子就很有印象,但只有到真正去到题中实践理论,就会豁然开朗。
辨析一:
#include<stdio.h>
int main()
{
int x=1,y=1,z=1;
z=x++,y++,++y;
printf("%d%d%d",x,y,z);
return 0;
}
大家首先看一下,z的最终结果是什么呢?
对于刚接触逗号表达式的同学来说,小编当时依据上面的①②两点,流程大概如下
在z=x++,y++,++y;z等于整个逗号表达式最后的值吗!在这个过程中y的结果是2,那z也是2咯,
最后x=2,y=3,z=2。简简单单咯~但这是错的,实际输入,得出的结果如下
吃了个大惊,怎么z等于1呢,追回源头,在哪出现过1呢!原来在流程1中x的过程结果是1,嗯?z不是等于逗号表达式最后的值吗!?
其实此处是优先级还没明白!在z=x++,y++,++y;中z=x++含有赋值运算符,其优先级要高于逗号运算符。逗号运算符的优先级是最小。此处相当于(z=x++),y++,++y;
如果要实现我们所想要的结果则只需变成z=(x++,y++,++y);
代码如下,结果如下
辨析二:
#include<stdio.h>
int main()
{
int z=1;
printf("%d\n",(z+=1,z+5,z++));
//printf("%d",z);
return 0;
}
大家还是看一下,z的最终结果是什么呢?
大家看一下下面流程思路正确吗?
理论实践
吃惊+1,怎么跟我预想的相差5呢!
此处的z+5,并没有什么实际意义,并不是z+=5!其它的就是大致相同了。
那小伙伴知道z最后的结果吗?
#include<stdio.h>
int main()
{
int z=1;
printf("%d\t",(z+=1,z+5,z++));
printf("%d",z);
return 0;
}
赶快理论实践吧!
希望对你有帮助,语言学习贵在坚持输入和输出!