Присвоение ссылок из массива другому массиву - «предупреждение: цель присваивания не является истинным значением» - PullRequest
0 голосов
/ 09 июля 2011

Рассмотрим следующий код. Я включил чрезмерные койки для ясности (по крайней мере, с моей стороны):

#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];

Я получаю сообщение об ошибке: предупреждение: цель назначения на самом деле не lvalue; это будет серьезной ошибкой в ​​будущем

1 Ответ

2 голосов
/ 09 июля 2011

Выражение subarray1 является lvalue для вашего объекта-указателя с таким же именем.Этот указатель указывает на первый элемент динамически распределяемого буфера.

Выражение &subarray1[0] является указателем rvalue , который указывает на первый элемент динамически распределяемого буфера (и, таким образом,он оценивает то же значение, что и subarray1).

Это , а не одно и то же, и вы не можете присвоить rvalue .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...