C++ operator ++和指针

Pan*_*kis 3 c++ pointers

我正在迈出具有Java背景的C++的第一步.我需要清除C++中++运算符的一些特性.考虑以下程序:

#include <iostream>
using namespace std;
void __print(int x, int *px) {
 cout << "(x, *px) = (" << x << ", " << *px << ")" << endl;
}

int main() {
 int x = 99;
 int *px = &x;
 __print(x, px);
 x++; __print(x, px);
 x = x + 1; __print(x, px);
 *px = *px + 1; __print(x, px);
 *px++; __print(x, px);
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,该程序打印:

(x, *px) = (99, 99)
(x, *px) = (100, 100)
(x, *px) = (101, 101)
(x, *px) = (102, 102)
(x, *px) = (102, 134514848)
Run Code Online (Sandbox Code Playgroud)

似乎*px =*px + 1对*px的影响与x上的影响不同.但这些东西不一样吗?不是吗*px == x?

Wea*_*Fox 9

*操作符后++使它返回一个错误的地址的值.在c ++中,运算符优先级很重要.看看这个 :

http://en.cppreference.com/w/cpp/language/operator_precedence

  • 你是对的!!!我试过(*px)++,问题解决了!非常感谢! (2认同)