C语言中算术运算的层次结构。
当我输入下面给出的代码时:C语言中算术运算的层次结构。,c,hierarchy,C,Hierarchy,当我输入下面给出的代码时: int a=10,b,c,d,e; c= a++; d = ++a; e = ++a; printf("value of c=%d, d =%d, e=%d",c,d,e); 它给我一个输出,比如c=10,d=12,e=13 当我们添加这些值时,即10+12+13变成35, 但当我编写代码时,它是这样的: b = a++ + ++a + ++a; printf("value of b=%d" ,b); 它给我输出36 有人能描述一下这个代码背后的过程吗?为什么代码
int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);
它给我一个输出,比如c=10
,d=12
,e=13
当我们添加这些值时,即10+12+13
变成35
,
但当我编写代码时,它是这样的:
b = a++ + ++a + ++a;
printf("value of b=%d" ,b);
它给我输出36
有人能描述一下这个代码背后的过程吗?为什么代码的输出是不同的?
谢谢大家! 它们之间的区别在于,第二个表达式并没有以++结尾,还需要添加一些其他值,这就是为什么a++是11,而不是10
int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);
在语句c=a++
中,首先使用a
的值(即10
),然后增加到11
语句
d=++a
第一个增量a
(现在是12
),然后使用其值在printf()语句中打印。
同样适用于e=++a
你的第二个片段
b = a++ + ++a + ++a;
printf("value of b=%d" ,b);
结果在未定义的行为()中,+
的操作数的求值顺序由实现决定。因此,第二个例子并不总是36
。第二个片段不一定总是36。谢谢你澄清所有的事情……你的答案也是正确的。我很高兴它帮助了你。参见常见问题