为何*a++;未对指针指向的变量执行自增?代码输出异常
问题分析与解决
你的代码问题出在运算符优先级上:*a++中,后置++的优先级高于解引用运算符*,所以这条语句实际执行的是*(a++)——先将指针a本身的地址向后偏移一个int的长度(指向了原变量a之后的内存区域),再对这个新地址进行解引用。这个操作完全没有修改你传入的原变量a的值,所以输出还是初始的2。
修正方案
有两种直观的修正方式:
方式一:用括号改变优先级
通过括号强制先解引用指针,再对变量值自增:
#include<iostream> using namespace std; void increment(int *a){ (*a)++; // 先解引用拿到原变量,再自增 } int main(){ int a=2; increment(&a); cout<<a; return 0; }
方式二:直接赋值自增
这种写法更清晰,避免优先级混淆:
#include<iostream> using namespace std; void increment(int *a){ *a += 1; // 直接对解引用后的变量加1 } int main(){ int a=2; increment(&a); cout<<a; return 0; }
两种写法运行后都会输出3,符合预期。
内容的提问来源于stack exchange,提问作者Toney 85
相关产品推荐
相关产品推荐

