首页 > 编程知识 正文

条件运算符“? :”是C语言中唯一的一个三目运算符,c语言中三目运算符的理解

时间:2023-05-05 08:54:09 阅读:242397 作者:3308

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 = %dn" ,x ,y);return 0;}

这是第一次想的测试代码,本来以为在执行完 x=1 后,x的值会随着发生改变,心想这玩意不就是if else 语句的简写吗,这有什么难的,可万万没想到的是,上机测试的时候,出问题了。
猜想结果(x = 2 , y = 1)。

测试结果出来后,这是怎么回事,和我想得不一样啊,怎么没有得到我想要的值,以为是我代码写错了,在经过排查后,没毛病啊,然后心想,这个和if else 语句一样, 换成if else 语句试试。

这,这是怎么回事,不敢相信,又回去测了一下三目运算符的例子。还是没有得到想要的结果,我炸了,难道是我把三目运算符的概念记错了?又赶紧去翻书。

没毛病啊,这是哪出了问题,一时间也想不过来,然后就去找各路神仙请教,经过讨论后,得到结果,三目运算符和if语句还是有区别的,三目运算符表达式1只是选择,不会改变其原有的值,但是if else 语句会。三目运算符的表达式1,只是逻辑判断(非0选择表达式2,否则选择表达式3),不会改变其原有的值,得到结果后,就去证实。

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。