请解释一下这段代码的结果。
//代码a 当我在我的笔记本电脑上运行这段代码时,y的值是4。我认为,逻辑上y的值应该是5,因为通过执行x++,它应该返回2而不增加,因为它是后增量,然后当我们添加现在包含的x时一个递增的值,即 3。所以根据我的说法,2+3 是 5。但根据我的 Turbo C++ 3.0 答案是 4。
#include <stdio.h>
void main() {
int x = 2,y;
**int y = x++ + x;** // ans 4
printf("y is :%d", y);
}
//代码B 当我运行这段代码时,答案是 6。这里++x 中的 Turbo C++ 3.0 正在获取 x++ 的增量值,这与上面提到的代码相反。从逻辑上讲,这里的答案是正确的,但在上面的代码中却不是。
#include <stdio.h>
void main() {
int x = 2,y;
**int y = x++ + ++x;** //and 6
printf("y is :%d", y);
}
最佳答案
首先,赋值运算符 =
从右到左工作,这意味着如果您编写 x = 2 + 4 + 1;
您的编译器会从最右边开始读取它数字为 1
,然后添加 4
,依此类推,然后将该值分配给 x
。
因此,在您的 case 语句中 y = x++ + x;
编译器开始从右侧看到它,即它首先看到 x
即 2
然后看到 x++
即也是 2
因为它是后增量运算符最后它添加它们并将 y
分配为 2 + 2
即 4
。
在第二种情况下,即y = x+++++x;
,编译器首先查看++x
,并且由于它是预增量运算符,因此它会增加x
变为 1,即 x
现在是 3
。在看到 x++
后,如上所述,因为它是后置运算符,因此在此操作中它将被视为 x
并且该值为 3
(请记住,我们之前将 x
增加了 1),因此编译器将 3 + 3
(即 6
)分配给 y
。
关于c - 后增量和预增量运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33487755/