我在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 18:32:04
哇,这么多人不知道C++运算符是如何工作的。:)
每个人都正确地指出了这是一个优先顺序的问题,然而,问题到底是什么,似乎每个人都回避了。
*p++;作为一条语句只做一件事。它会递增指针。在对其求值并取消引用其原始值之后(在本例中将忽略该原始值)。
int a[ 2 ] = { 10, 20 };
int* b = &a[ 0 ];
int c = *b++;在上面的例子中,c将等于10,b将指向a (20)的第二个元素。因为指针b将在增量之前求值。
https://stackoverflow.com/questions/9800760
复制相似问题