C语言:逗号表达式(辨析)-创新互联

逗号表达式:是C语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,①从左往右逐个计算表达式②整个表达式的值为最后一个表达式的值

成都创新互联公司网络公司拥有十余年的成都网站开发建设经验,上千客户的共同信赖。提供成都网站建设、成都网站制作、网站开发、网站定制、友情链接、建网站、网站搭建、自适应网站建设、网页设计师打造企业风格,提供周到的售前咨询和贴心的售后服务

——百度百科 

如果令x的初始值为1的话,++x与x++最终结果都是2,但在其过程中会有较大差异。(--x与x++同理)

在过程中:

++x是2(x位于++后是加完之后),过程中是2。

x++是1(x位于++前是加完之前),过程中是1。

我是这么记忆的,一下子就很有印象,但只有到真正去到题中实践理论,就会豁然开朗。

辨析一:
#includeint 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);

代码如下,结果如下

辨析二:
#includeint 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最后的结果吗?

#includeint main()
{
	int z=1;
	printf("%d\t",(z+=1,z+5,z++));
	printf("%d",z);
	return 0;
}

赶快理论实践吧!

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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文标题:C语言:逗号表达式(辨析)-创新互联
URL地址:http://scyanting.com/article/iosop.html