В большинстве случаев, когда вы используете массив, он распадается на указатель на свой начальный элемент.Итак, если у вас есть:
void f(int* x);
int array[10];
int* initial_element_of_array = array; // array decays to a pointer to initial element
f(array); // same here
f()
получает указатель на начальный элемент array
.
Поначалу довольно странно то, что если у функции есть параметр типа массива (например, если у вас void f(int x[])
), он фактически преобразуется так, что он точно такой же, как void f(int* x)
.Между ними нет никакой разницы: параметры типа массива совпадают с параметрами типа указателя.
После передачи массива в функцию все, что у вас есть, - это указатель на его начальный элемент, поэтому, если вы примените &
оператор int*
, вы получаете int**
(указатель на int*
).