为何条件运算符简化版与if-else展开版代码输出不同?
两段C代码输出差异的原因
核心区别一句话就能说清:第一段代码给变量a赋了新值,第二段代码里a自始至终都是初始的0。
第一段代码的执行逻辑
代码:
int a = 0; a = 7 > 2 ? printf("6") : printf("4"); printf ("%d",a);
printf函数的返回值是成功打印的字符个数,这里打印"6"是1个字符,所以printf("6")会返回1。
因为7>2为真,条件运算符会执行printf("6"),同时把它的返回值1赋值给a。最终先输出"6",再输出a的值1,拼起来就是61。
第二段代码的执行逻辑
代码:
int a = 0 ; if(7>2) { printf("6"); } else { printf("4"); } printf("%d",a);
这段里if分支只做了打印"6"的操作,完全没对a进行重新赋值,a一直保持初始的0。所以先输出"6",再输出a的0,拼起来就是60。
内容的提问来源于stack exchange,提问作者Master Shahaam
相关产品推荐
相关产品推荐

