C语言:逗号表达式(辨析)

逗号表达式:是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的最终结果是什么呢?

对于刚接触逗号表达式的同学来说,小编当时依据上面的①②两点,流程大概如下

流程1
流程2

 在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;
} 

赶快理论实践吧!

希望对你有帮助,语言学习贵在坚持输入和输出!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值