C указатель на массив / массив указателей неоднозначности - PullRequest
440 голосов
/ 13 мая 2009

В чем разница между следующими декларациями:

int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);

Каково общее правило для понимания более сложных объявлений?

Ответы [ 12 ]

0 голосов
/ 12 октября 2016

Полагаю, второе заявление сбивает с толку многих. Вот простой способ понять это.

Позволяет иметь массив целых чисел, т.е. int B[8].

Давайте также будем иметь переменную A, которая указывает на B. Теперь значение в A - это B, т.е. (*A) == B. Следовательно, A указывает на массив целых чисел. В вашем вопросе arr похож на A.

Аналогично, в int* (*C) [8], C - указатель на массив указателей на целое число.

0 голосов
/ 31 марта 2013

В указателе на целое число, если указатель увеличивается, то идет следующее целое число.

в массиве указателей, если указатель увеличивается, он переходит к следующему массиву

...