Индексирование указателя при доступе к элементам массива - PullRequest
2 голосов
/ 11 апреля 2019

Я новичок и пытаюсь понять, как работают многомерные массивы.

Пока я получил этот фрагмент кода, который я не понимаю:

int arr[] = { 3, 5, 6, 7, 9 };
int (*ptr)[5] = &arr;

Хорошо, так. Я понимаю, что ptr - это указатель на массив из 5 элементов.

Но что делает «&»? Указывает ли ptr на начальный адрес «arr»? Но разве «arr» уже не является адресом? Почему тогда «&»? Также. Каково значение индексации 5? Потому что, когда я пытаюсь дать любое другое число, кроме 5, оно выдает ошибку.

Извините, если все это звучит глупо, но я так растерялся! Помогите!

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Здесь у вас есть переменная arr с типом array of 5 int:

int arr[] = { 3, 5, 6, 7, 9 };

Здесь вы объявляете указатель ptr на array of 5 int:

int (*ptr)[5]

Это получает адрес arr с типом pointer to array of 5 int

&arr

, и это назначение работает, так как типы указателей равны:

int (*ptr)[5] = &arr;

Теперь, если вы измените типptr другому типу, то есть pointer to array of 6 int:

int (*ptr)[6];

, тогда назначение больше не работает, так как типы указателей теперь не соответствуют.Вот почему вы получаете ошибку.

Примечание: [5] в этом коде не индексирует что-либо, но является лишь частью объявления переменной (количество элементов в массиве)

0 голосов
/ 11 апреля 2019

Ваш массив имеет только одно измерение, поэтому он не многомерен.

Ваш массив имеет 5 элементов, и поскольку массивы начинаются с нуля, доступ к элементу [5] (шестой элемент) фактически приводит к неопределенному поведению.

arr это не адрес, это массив. & - это адрес оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...