Адреса массива

#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; имеет приоритет над оператором .