首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-03-21 16:11:19

*运算符在++之后工作,因此它返回错误地址的值。在c++中,需要知道运算符的优先顺序。看看这个:

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

添加括号以更改运算符的优先顺序,例如:

代码语言: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) = (103, 103)
票数 9
EN

Stack Overflow用户

发布于 2012-03-21 16:14:19

问题出在运算符的优先级上。试试(*px)++

票数 2
EN

Stack Overflow用户

发布于 2012-03-21 16:14:39

当你执行*px++时,你实际上是在地址上加1,然后得到值。你很可能指的是(*px)++

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

https://stackoverflow.com/questions/9800760

复制
相关文章

相似问题

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