#c #arrays #pointers
#c #массивы #указатели
Вопрос:
Если у меня есть массив, объявленный следующим образом:
int a[3][2];
хранятся по адресу A
.
Тогда a 1 равно A 2*4
, это мне понятно, но почему amp;a 1
равно A 6*4
?
Ответ №1:
a
является массивом int[2]
. Который имеет размер 2 * sizeof(int)
. Вот почему a 1 = A 2*4
. (поскольку sizeof(int) = 4
в вашем случае)
Однако amp;a
это указатель на int[3][2]
. Поскольку sizeof(int[3][2]) = 6 * sizeof(int)
, следовательно: amp;a 1 = A 6*4
Ответ №2:
Тогда a 1 равно A 2*4
Это потому, что a
распадается на int (*)[2]
и 1
приводит к 2 * sizeof(int)
.
но почему amp;a 1 равно A 6 * 4?
В этом случае amp;a
возвращает int (*)[3][2]
и 1
приводит к 2 * 3 * sizeof(int)
.
Ответ №3:
Потому что оператор amp; имеет приоритет над оператором .