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

为何int *p = a++;报错?数组指针初始化左值错误解析

数组名自增触发“增量运算符需要左值”错误的原因及解决方法

你遇到的错误核心不是指针未初始化,而是数组名a属于不可修改的左值,没法直接用++运算符操作。

在C++里,数组名虽然多数时候会自动转成指向首元素的指针,但这个转换结果是临时的右值,而++要求操作数是能被修改的左值——简单说就是得是个可以被赋值的变量。数组名代表的是数组在内存里的固定起始位置,它的值是不能被改变的,所以a++本质是想修改数组的起始地址,这完全不符合语法规则。

要让指针指向数组第二个元素,有两种简单的正确写法:

方法一:直接指针偏移

#include <iostream>
using namespace std;
int main() {
    int a[] = {1, 2, 3, 4};
    int *p = a + 1; // 利用指针偏移直接指向第二个元素
    cout << *p << endl; // 输出2
}

方法二:先赋值指针再自增

#include <iostream>
using namespace std;
int main() {
    int a[] = {1, 2, 3, 4};
    int *p = a; // 先让指针指向数组首元素
    p++; // 对可修改的指针变量自增,指向第二个元素
    cout << *p << endl; // 输出2
}

内容的提问来源于stack exchange,提问作者dhruv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:33:12