Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Разыменование указателя на массив

#cpp #массивы #указатели


int array[3]{1,2,3};
int (*ptr)[3]=&array;


при разыменовании 

std::cout<<*ptr;
(или std::cout<


Ответы

Ответ 1



В отладчике GDB есть такая комнада как ptype, которая показывает тип какого-либо выражения. Она поможет нам разобраться: (gdb) list 1 #include 2 3 int main() 4 { 5 int array[3] = {1, 2, 3}; 6 int (*ptr)[3] = &array; 7 8 std::cout << *ptr; 9 } (gdb) ptype array type = int [3] (gdb) ptype ptr type = int (*)[3] (gdb) ptype *ptr type = int [3] Получается, что в строке std::cout << *ptr; *ptr — это сам array, который из типа int [3] неявно преобразуется1 в тип int *, т. е. в адрес первого элемента массива. 1. Имеет место array-to-pointer decay.

Комментариев нет:

Отправить комментарий