Имея int array[4][3];
применяется следующее
array
- это массив из 4 элементов. Каждый элемент представляет собой массив с 3 int
с. В большинстве случаев использование имени само по себе приводит к уменьшению массива до указателя на его первый элемент; тогда array
становится указателем на массивы 3 int
s
array + 1
- указатель на массив из 3-х целых. Здесь array
распадается на указатель, а 1
относится к массиву 3 int
&array
- адрес всего массива. Указывает на объекты типа массив из 4 массивов по 3 дюйма
&array + 1
является вторым (который на самом деле не существует) элементом псевдо- массива массивов из 4 массивов по 3 дюйма
array[0]
- массив из 3-х целых. Обычно затухает до указателя на первый элемент
array[0] + 1
указывает на 2-е int
в array[0]
&array[0]
адрес объекта массива типов из 3-х точек
&array[0]+1
2-й элемент массива массивов из 3-х элементов
PS. Я постараюсь сделать рисунок (ASCII) после обеда.
Хммм ... рисунок сложный:)
Прежде чем попытаться, я подумал, что смогу сделать лучший рисунок.
Это лучшее, что я мог придумать ...
int array[4][3] ........[aaabbbcccddd]........
where aaa, bbb, ccc, ddd are arrays of 3 ints'
the [] represent the object itself; the {} represent pointers.
array (object) ........[AAABBBCCCDDD]........ int[4][3]
array (decayed) ==> ........{aaa}bbbcccddd........ int(*)[3]
array + 1 ==> ........aaa{bbb}cccddd........ int(*)[3]
&array ==> ........{aaabbbcccddd}........ int(*)[4][3]
&array + 1 ==> ........aaabbbcccddd{xxxxxxxxxxxx}........ int(*)[4][3]
array[0] (object) ........[AAA]bbbcccddd........ int[3]
array[0] (decayed) ==> ........{a}aabbbcccddd........ int*
array[0] + 1 ==> ........a{a}abbbcccddd........ int*
&array[0] ==> ........{aaa}bbbcccddd........ int(*)[3]
&array[0] + 1 ==> ........aaa{bbb}cccddd........ int(*)[3]