До сих пор я думал, что массив такой же, как указатель. Но я обнаружил странный случай:
код
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
совпадают, каков адрес памяти, в которой хранятся значения массива?