关于逗号运算符的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/12 03:31:37
int i=0;
i=((i=3*4,i*4),i+10);
printf("%d",i);
i应该为58,但是结果i为22,为什么?

逗号表达式顺序执行,其值为最后一个表达式的值。
所以:i=3*4,i*4,i+10三个表达式先后执行,((i=3*4,i*4),i+10); 的值为执行后i+10的值。
i=3*4的时候,i=12,然后i的值没有改变,i+10就等于
22,被赋给i,所以i就是22

首先。你只要明白逗号运算的时候是去前面还是后面就很容易知道了这个题目的答案了。学习C语言很有意思的。好好学。做个高级程序员不错的。你会发现编程很有意思。开始可能有难度。慢慢的会喜欢的

i=((i=3*4,i*4),i+10);

首先执行I=3*4;//因为=比,运算符优先级高,执行之后,I=12;
再进行I*4运算,记住,此时I的值并没有改变,只是进行了一次乘法,然后再进行I+10运算,并将I+10的结果赋值给I,所以I=22;

逗号运算符是右结合型,所以那个表达式是这样的,先是i=3*4这时i值为12再后就是i*4因为逗号是右结合型,所以第一个括号里的值是48.再是i+10为22,显然表达式48,22的值为22.所以最终结果是22.

从左往右演算就可以搞定了,
将左面得到的值代入比它向右的表达式中,
就这样了。