#cpp #массивы #указатели
int array[3]{1,2,3}; int (*ptr)[3]=&array; при разыменовании std::cout<<*ptr; (или std::cout<Ответы
Ответ 1
В отладчике GDB есть такая комнада как ptype, которая показывает тип какого-либо выражения. Она поможет нам разобраться: (gdb) list 1 #include2 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.
Комментариев нет:
Отправить комментарий