Рассмотрим следующий код. Я включил чрезмерные койки для ясности (по крайней мере, с моей стороны):
#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; это будет серьезной ошибкой в будущем