如果指针的递增方式不同,为什么这段代码会有不同的输出 C++

Why does this code have different outputs if pointers are incremented differently c++

#include <iostream>
using namespace std;
int main() {
  int num=10;
  int *ptr=NULL;
  ptr=&num;
  num=(*ptr)++; //it should increase to 11
  num=(*ptr)++; //it should increase to 12 but im getting 10
                //if i dont initialize num and just use (*ptr)++ it gives me 11
  cout<<num<<endl;
    return 0;
}

我想知道为什么会这样,为什么我得到 10 作为输出。

(*ptr)++num 增加到 11,但 returns 其先前的值 (10),因为 ++ 是后缀。

所以对于 num = (*ptr)++,您暂时将 num 增加到 11,但随后(重新)分配给它 10。

why is this happening

因为你使用的是post-increment operator而不是pre-increment operator.

(*ptr)++替换为:

num = ++(*ptr);//uses pre-increment operator

你会在程序结束时得到 12 作为输出,可以看到 here

备选方案

你也可以只写(*ptr)++;而不赋值给num。所以在这种情况下代码看起来像:

int main() {
  int num=10;
  int *ptr=NULL;
  ptr=&num;
  (*ptr)++; //no need for assignment to num
  (*ptr)++; //no need for assignment to num
                
  cout<<num<<endl;
    return 0;
}

是给num赋值造成的。 ++ 运算符 returns 旧值然后递增。但是,然后将旧值分配给 num.