1 问题提出
在VS2015基于控制台的程序中,定义一个int数组类型ptr,该数组中包含了4个元素。接下来将数组的第2个元素值加123,如下代码
int ptr[] = { 6, 7, 8, 9 };
*(++ptr) += 123;
编译时会报error C2105 “++需要左值”的错误。
2 问题分析
数组名同时也是该数组元素的首地址。也就是说,ptr的值与&ptr[0]的值相同,如图1所示。
图1 ptr的值与&ptr[0]值
ptr和&ptr[0]都代表素组首个元素的内存地址,该地址为0x0056fb04,所以两者都是常量,在程序运行过程中它们保持不变。因此,对ptr进行自增操作就会报错。
相关链接1:左值和右值
左值可以出现在赋值语句的左边和右边;右值只能出现在赋值语句的右边,不能出现在赋值语句的左边。变量是左值,常量是右值。
3 问题解决
可以把ptr作为右值赋值给指针变量的值,然后可以修改指针变量的值。
int ptr[] = { 6, 7, 8, 9 };
int* pValue = ptr;
*(++pValue) += 123;