Массивы реализованы как смежное расположение памяти в памяти. Когда вы пишете что-то вроде
int arr[] = {1, 2, 3};
int *p = arr
, тогда здесь arr
является всего лишь указателем базового типа int
, указывающим на первый элемент в массиве, а оператор []
просто помогает в его приращении
, например
arr[2]; // same as *(arr+2)
p[2]; // same as *(p+2) i.e. arr[2]
Как сказал @melpomene, ваш вопрос не совсем корректен. Указатель на массив подразумевает что-то вроде
int (*p)[3] = &arr;
Здесь указатель имеет базовый тип int [3]
, поэтому, когда вы увеличиваете (p++
), тогда p будет увеличиваться на 3 int
.
Указатели на массивы более заметны в случае многомерных массивов