为何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
相关产品推荐
相关产品推荐

