首页 > 解决方案 > `++a=20;` 的意义何在?

问题描述

当我不小心尝试了这段代码时,我感到很困惑++a=20;,这在 C 中是不允许的。但它可以工作,a结果是 20。它是否与指针一起工作?

#include<iostream>
using namespace std;
int main()
{
   int a=10;
   ++a=20;
   cout<<a<<endl;
    return 0;
}

那是来自https://godbolt.org/

        mov     DWORD PTR [rbp-4], 10
        add     DWORD PTR [rbp-4], 1
        mov     DWORD PTR [rbp-4], 20

标签: c++

解决方案


简短回答:毫无意义

让我们阅读汇编代码。
mov DWORD PTR [rbp-4], 10
为整数变量 a 分配了 4 字节(32 位)。因此它位于 [rbp-4] 中。此代码只是将其值分配给 10。现在 a = 10。

add DWORD PTR [rbp-4], 1
相当于在 a 上加 1
这可以是两者a++,也可以是++a。但是,它们略有不同。前者返回 a 的值,然后将其递增。后者增加 a 的值,然后返回它。

mov DWORD PTR [rbp-4], 20
它相当于 a = 20。

所以这些步骤实际上是这样的:
a = 10
a++
a = 20

这就是为什么 a 最后等于 20 的原因。


推荐阅读