我在C++上迈出了我的第一步,有很好的Java背景。我需要清除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;
}令我惊讶的是,程序会打印:
(x, *px) = (99, 99)
(x, *px) = (100, 100)
(x, *px) = (101, 101)
(x, *px) = (102, 102)
(x, *px) = (102, 134514848)似乎*px = *px +1对*px和x没有相同的影响。但这不是一样的吗?不是*px == x吗?
发布于 2012-03-21 16:11:19
*运算符在++之后工作,因此它返回错误地址的值。在c++中,需要知道运算符的优先顺序。看看这个:
http://en.cppreference.com/w/cpp/language/operator_precedence
添加括号以更改运算符的优先顺序,例如:
#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;
}结果:
(x, *px) = (99, 99)
(x, *px) = (100, 100)
(x, *px) = (101, 101)
(x, *px) = (102, 102)
(x, *px) = (103, 103)发布于 2012-03-21 16:14:19
问题出在运算符的优先级上。试试(*px)++;
发布于 2012-03-21 16:14:39
当你执行*px++时,你实际上是在地址上加1,然后得到值。你很可能指的是(*px)++。
https://stackoverflow.com/questions/9800760
复制相似问题