До сих пор я думал, что массив такой же, как указатель. Но я обнаружил странный случай:
код
int array[5] = { 10,11,12,13,14};
std::cout << array << std::endl;
std::cout << &array << std::endl;
std::cout << &array[0] << std::endl;
int *pArray = new int[5];
std::cout << pArray << std::endl;
std::cout << &pArray << std::endl;
std::cout << &pArray[0] << std::endl;
выход
0x7ffeed730ad0
0x7ffeed730ad0
0x7ffeed730ad0
0x7f906d400340
0x7ffeed730a30
0x7f906d400340
Как вы можете видеть, array и &array имеют одинаковое значение. Но pArray и &pArray имеют разное значение. Если массив совпадает с указателем, адрес массива должен отличаться от массива. Как array и &array могут быть одинаковыми? Если array и &array совпадают, каков адрес памяти, в которой хранятся значения массива?