You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何*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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:36:17