конвертации 8.3.4/8 N3797:указатель на массив
[Пример:
рассмотреть
int x[3][5]
;Здесь
x
представляет собой массив целых чисел 3 × 5. Когда в выражении появляетсяx
, оно преобразуется в указатель на ( первый из трех) пятичленных массивов целых чисел. В выраженииx[i]
, которое эквивалентно*(x+i)
,x
сначала преобразуется в указатель , как описано; затемx+i
преобразуется к типуx
, который включает в себя умноженияi
по длине объекта, на который указывает указатель, а именно пять целочисленных объектов [...]
Поскольку тип x
является «массивом из 3 массивов из 5 целых чисел», мы также имеем x + i. Предположим, что i = 2;
Какое значение x + i
(Call him arr
) элементов после преобразования в массив из 3 массивов из 5 целых чисел? Я имею в виду, что arr[3]
равно?
Вы сделали этот вопрос довольно нескюрером, ИМО. 'x + i' является' int (*) [5] ', это значение (при разыменовании) является объектом массива в i-м индексе. – jrok
@jrok Я согласен, что 'x + i' имеет тип' int (*) [5] '. Но в стандарте указано, что _ then x + i преобразуется в тип x_, то есть к типу 'int [3] [5]', который сам может быть неявно преобразован в 'int (*) [5]' через array- to-pointer-conversion (раздел 4.2 стандарта). –
Не могли бы вы пересмотреть стандартную ссылку? 3.8 - «Время жизни объекта», и нет 3.8.4. – jrok