int a;
int b=5;
printf("%d\n",a=2+(b+b++,b+8,++b));
return 0;
下面是我的理解,供参考:
主要看逗号表达式的运算:
首先,执行b+b++,这个表达式里b++执行完,b=6;
然后,执行b+8,这个表达式的值为:6+8=14;
接着,执行++b,这个表达式的值为:6+1=7,执行完++b,b=7;
然后,整个逗号表达式(b+b++,b+8,++b)的值为最后一个表达式的值,其值为7;
最后,a=2+7=9,所以最后打印a的值为9。
测试如下:
参考链接:
#include <stdio.h>
int main(void){
int a;
int b=5;
int c,d,e;
// http://c.biancheng.net/view/285.html
// https://blog.csdn.net/ammmmaa/article/details/112495258
printf("%d\n",a=2+(b+b++,b+8,++b));
// c = (b+b++);
// printf("c=%d\n",c);
// printf("%d\n",a=2+(c=(b+b++),(printf("b=%d\n",b)),d=(b+8),e=(++b)));
// printf("c=%d,d=%d,e=%d\n",c,d,e);
return 0;
}
b=5 b++之后b=6 然后到最后++b=7
所以括号里面就是7
2+7=9
首先,先看逗号表达式,在逗号表达式中,数据运算永远都是从左向右进行计算,在计算的过程中要注意,有没有数据的改变。
写的少一点,想的多一点,思路清晰一点,括号多一点,错误异常少一点
【以下回答由 GPT 生成】
根据C语言的运算符优先级和结合性规则,表达式的求值按照以下步骤进行:
b++
的值,此时 b
的值为5,然后将 b
的值加1,此时 b
的值变为6,b++
的值为5。++b
的值。由于上一步中已经将 b
的值加了1,所以此时 b
的值为6,将 b
的值再加1,此时 b
的值变为7,++b
的值为7。b + b++ + b
的值。根据第一步中的计算,b
的值为6,所以 b + b++ + b
的值为 6 + 5 + 6 = 17。2 + (17 + 8 + 7)
,先计算括号内的表达式,17 + 8 + 7
的值为32,然后再加上2,得到 2 + 32 = 34
。a
,所以 a
的值为34。34
输出到屏幕上。所以,这段代码的结果应该是34,不是9。请检查代码是否存在其他问题,比如是否遗漏了头文件的引入等。
【相关推荐】