将数组中的引用分配给另一个数组 - “警告:赋值目标不是真正的左值”

时间:2011-07-09 18:33:48

标签: c++ arrays pointers reference

请考虑以下代码。为了清晰起见,我已经包含了过多的couts(至少在我的结尾):

#include <iostream>

using namespace std;

int main(){
double *array1;    
array1 = new double[10];
array1[5] = 10;

//the following 2 lines return the same thing
cout << "array1 = " << array1 << endl;
cout << "&array1[0] = " << &array1[0] << endl;

double *subarray1;
subarray1 = new double[5];
subarray1 = &array1[5];

//now the following 2 lines return the same thing
cout << array1[5] << endl;
cout << subarray1[0] << endl;

//but I'm not allowed to do:
//&subarray1[0] = &array1[5];

return 0;
}

因为

subarray1 == &subarray1[0]

因为我被允许这样做:

subarray1 = &array1[5];

那为什么我不能这样做:

&subarray1[0] = &array1[5];

我收到的错误是:警告:作业目标不是真正的左值;这将是一个很难的错误

1 个答案:

答案 0 :(得分:2)

表达式subarray1是指向同名指针对象的左值。该指针指向动态分配缓冲区的第一个元素。

表达式&subarray1[0]是一个 rvalue 指针,指向动态分配的缓冲区的第一个元素(因此它的计算结果与subarray1的值相同)。

这些不是相同的东西,你可能不会分配给 rvalue