c语言三目运算符的一些小细节,赋值不改变变量的值

C语言三目运算符的一些小细节,赋值不改变变量的值。

今天无聊翻翻C语言的课本,看到三目运算符的时候,心想这个和if else 语句用法一样,突然脑海里浮现一个想法,三目运算符结构(表达式1 ? 表达式2 :表达式3),“表达式1” 为逻辑表达式,如果为真(非0的值)则执行表达式2,如果为假(表达式1的值为0),则执行表达式3。 既然表达式1是逻辑表达式,如果记得没错在C语言中赋值语句也可以当逻辑表达式,其判断是赋值完成最后得到的值(为零则是假,非零则是真),所以当三目运算符的表达式1的值为赋值语句时,那肯定可以执行,万万没想到的是,猜中了开头,没猜中结尾。

#include<stdio.h>
 int main(){ 
	int x = 5, y;
	y = ( x = 1 ?  x++ : x);
	printf("x = %d, y = %d\n" ,x ,y);
	return 0;
	}

这是第一次想的测试代码,本来以为在执行完 x=1 后,x的值会随着发生改变,心想这玩意不就是if else 语句的简写吗,这有什么难的,可万万没想到的是,上机测试的时候,出问题了。
猜想结果(x = 2 , y = 1)。
《c语言三目运算符的一些小细节,赋值不改变变量的值》
测试结果出来后,这是怎么回事,和我想得不一样啊,怎么没有得到我想要的值,以为是我代码写错了,在经过排查后,没毛病啊,然后心想,这个和if else 语句一样, 换成if else 语句试试。
《c语言三目运算符的一些小细节,赋值不改变变量的值》
这,这是怎么回事,不敢相信,又回去测了一下三目运算符的例子。还是没有得到想要的结果,我炸了,难道是我把三目运算符的概念记错了?又赶紧去翻书。
《c语言三目运算符的一些小细节,赋值不改变变量的值》
没毛病啊,这是哪出了问题,一时间也想不过来,然后就去找各路神仙请教,经过讨论后,得到结果,三目运算符和if语句还是有区别的,三目运算符表达式1只是选择,不会改变其原有的值,但是if else 语句会。三目运算符的表达式1,只是逻辑判断(非0选择表达式2,否则选择表达式3),不会改变其原有的值,得到结果后,就去证实。

《c语言三目运算符的一些小细节,赋值不改变变量的值》

这时,经过执行表达式1后,选择执行表达式2,最后结果赋值给变量y,结果和猜测的一样,当然这一个例子还是无法证实。

《c语言三目运算符的一些小细节,赋值不改变变量的值》

经过测试后证实了我们的猜测,当然只是猜测,这也牵扯到了C语言的三目运算符和if else 语句的底层实现原理,那些知识还没学到,现在只能猜猜了,哈哈哈。测试时也遇见了新问题,发现编译器不同测试结果也略有不同,我用是vc++ 6.0 和 vc++ 2010,当用dev的测试第一个例子时出现了新的结果,有兴趣可以去试试哦。
由于目前知识有限,只能到这了,如果有新的猜测或者新的结果,当然还有知道C语言底层原理的童鞋,有兴趣欢迎帮我再补充哦。

    原文作者:.ASEN.
    原文地址: https://blog.csdn.net/weixin_47304332/article/details/121409440
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞