我无法使用指针更改整数的值

时间:2014-07-10 13:45:27

标签: c++ c pointers

以下是我正在运行的代码:

#include <iostream>
using namespace std;

int main()
{
    int x = 5;
    int *p;
    p = &x;
    *p++;
    cout<<x<<endl;
    return 0;
}

输出应为6,因为p指向x的地址。但是,我得到了5。

但更有趣的是,当我用*p++更改*p = *p+1时,我无法理解为什么输出为6。这是为什么?

3 个答案:

答案 0 :(得分:7)

你错了。 * p ++读取p指向的值,然后增加指针p。你可能想要(* p)++。

* p = * p + 1有效,因为它是正确的。

答案 1 :(得分:3)

Postfix ++的优先级高于一元*,因此*p++被解析为*(p++); IOW,你正在递增指针,而不是指向的东西。

使用(*p)++增加指向的内容,或使用++*p

答案 2 :(得分:0)

如果您不理解运算符优先级,请使用括号。

*p++

*(p++)

你想要

(*p)++

经验法则是:

  • 乘法和除法在加法和减法之前进行
  • 其他一切,只需使用括号