首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++运算符++和指针

C++运算符++和指针
EN

Stack Overflow用户
提问于 2012-03-21 16:09:37
回答 7查看 652关注 0票数 3

我在C++上迈出了我的第一步,有很好的Java背景。我需要清除C++中++运算符的一些特性。考虑以下程序:

代码语言:javascript
运行
复制
#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;
}

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

代码语言:javascript
运行
复制
(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吗?

EN

Stack Overflow用户

发布于 2012-03-21 18:32:04

哇,这么多人不知道C++运算符是如何工作的。:)

每个人都正确地指出了这是一个优先顺序的问题,然而,问题到底是什么,似乎每个人都回避了。

*p++;作为一条语句只做一件事。它会递增指针。在对其求值并取消引用其原始值之后(在本例中将忽略该原始值)。

代码语言:javascript
运行
复制
int  a[ 2 ] = { 10, 20 };
int* b = &a[ 0 ];
int  c = *b++;

在上面的例子中,c将等于10,b将指向a (20)的第二个元素。因为指针b将在增量之前求值。

票数 0
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9800760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档