Адреса Массива - PullRequest
       3

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

8 голосов
/ 11 ноября 2011

Если у меня есть массив, объявленный так:

int a[3][2];

хранится по адресу A.

Тогда + 1 равно A+2*4, это для меня ясно, но почему &a+1 равно A+6*4?

Ответы [ 3 ]

7 голосов
/ 11 ноября 2011

a - это массив int[2].Который имеет размер 2 * sizeof(int).Вот почему a + 1 = A + 2*4.(поскольку sizeof(int) = 4 в вашем случае)

Однако, &a является указателем на int[3][2].Поскольку sizeof(int[3][2]) = 6 * sizeof(int), следовательно: &a + 1 = A + 6*4

2 голосов
/ 11 ноября 2011

Тогда a + 1 равно A + 2 * 4

Это потому, что a уменьшается до int (*)[2], а +1 приводит к 2 * sizeof(int).

но почему & a + 1 равно A + 6 * 4?

В этом случае &a возвращает int (*)[3][2], а +1 приводит к 2 * 3 * sizeof(int).

0 голосов
/ 11 ноября 2011

Потому что оператор & имеет приоритет над оператором +.

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