Какой тип p[0]
?
int*
Какой тип a[0]
?
int[3]
a[0]
распада доуказатель в соответствующем контексте (например, при передаче функции в качестве аргумента), но он не является родным, полностью в отличие от p[0]
, который находится с самого начала. Вы заметите разницу, если, например, сравните размер обоих (sizeof(a[0])
дает размер трех целых, sizeof(p[0])
дает размер указателя).
Элементы массива всегда просто размещены один за другим смежно, поэтому для a
есть два массива, размещенных один за другим:
a: { { -1, -1, -1 }, {-1, -1, -1 } }
Для p
фактически точно то же самое, каждый член следует один за другим непрерывно;только на этот раз члены являются истинными указателями (то есть, некоторые адреса в памяти). есть других массивов, но они (обязательно) расположены в другом месте:
p: { <pointer>, <pointer> }
| |
V |
{ 1, 2, 3} |
V
{ 4, 5, 6}
Итак, в заключение, ваше предположение верно.