Если вопрос пытается найти указатели в сравнении с массивами, они не всегда совместимы.Это скрыто в представленном коде, потому что массив немедленно преобразуется в указатель.
int* array1 = new int[5]; // Legal, initialising pointer with heap allocated array
int array2[5] = {0}; // Declaring array directly on the stack and initalising with zeros
int *p = 0; // Declaring pointer and initialising to numm
p = array2; // Legal, assigning array to pointer
p = array1; // Legal, assigning pointer to pointer
array1 = p; // Legal, assigning pointer to pointer
array2 = p; // ILLEGAL, assigning pointer to array
Здесь array2 имеет тип массива и не может использоваться для хранения указателя.На самом деле, массив вообще не может быть переназначен, так как он не является l-значением.
int array3[5] = {0}; // Declaring array directly on the stack and initalising with zeroes
array3 = array2; // ILLEGAL, array not an l-value
Массив имеет фиксированный адрес и переназначение будет похоже на попытку записи:
int i = 0;
&i = p;
[Надеюсь, попытка переназначить местоположение переменной - очевидная ерунда.]