Согласно cppreference:
Если тип выражения является типом массива переменной длины, вычисляется выражение и размер массива он вычисляется во время выполнения.
Это означает: если тип выражения является типом VLA, то оценивается выражение. Например:
#include <stdio.h>
int main() {
int i = 0;
int a[i];
printf("%zu\n",sizeof(a[i++]));
printf("%d\n",i); // Here, print 0 instead of 1
return 0;
}
Итак, согласно ссылке, здесь i
становится 1
. Но с моим компилятором GCC i
печатается как 0
.
См. демонстрацию Wandbox.
a[i++]
не является выражением типа VLA. В конечном счете, это индексное выражение, имеющее типint
. Кроме того, даже для VLAa[0]
является нарушением ограничений. - person StoryTeller - Unslander Monica   schedule 07.02.2018int a[i][i]; sizeof(a[i++])
, это будет sizeof(vla) - person Uprooted   schedule 07.02.2018