以下是我正在运行的代码:
#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。这是为什么?
答案 0 :(得分:7)
你错了。 * p ++读取p指向的值,然后增加指针p。你可能想要(* p)++。
* p = * p + 1有效,因为它是正确的。
答案 1 :(得分:3)
Postfix ++
的优先级高于一元*
,因此*p++
被解析为*(p++)
; IOW,你正在递增指针,而不是指向的东西。
使用(*p)++
增加指向的内容,或使用++*p
。
答案 2 :(得分:0)
如果您不理解运算符优先级,请使用括号。
*p++
是
*(p++)
你想要
(*p)++
经验法则是: