#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.
Комментариев нет:
Отправить комментарий