c - 后增量和预增量运算符

标签 c increment operator-precedence post-increment pre-increment

请解释一下这段代码的结果。

//代码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; 编译器开始从右侧看到它,即它首先看到 x2然后看到 x++ 即也是 2 因为它是后增量运算符最后它添加它们并将 y 分配为 2 + 24

在第二种情况下,即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/

相关文章:

C++ - 带有和不带有 if 语句的奇怪时间测量

c - 为什么这些构造使用增量前和增量后未定义的行为?

java - 如何在大文本文件的开头插入文本?

c - 如何从 Swift 传递引用到 C 库

c - 带数组的后增量指针

我可以 bind() 到 in6addr_any( ie::) 和 sendto() localhost

javascript - 增量内 Angular 表达式

c++ - 一次将反弹变量递增一个 - C++

java - 如何通过Java编码证明 '&&'和 '||'的优先级?

c++ - 我 =++i+++i;在 C++ 中