sizeof(x)
относится к массиву, который имеет 5
элементов типа int
.Отсюда вывод.
Код было бы намного проще понять, если бы вы не перегружали имя x
.
Технически, что у вас есть, это массив переменной длины, VLA,Это потому, что C const
на самом деле означает только чтение и должен быть оценен во время выполнения.Следовательно, sizeof
, в этом случае, оценивается во время выполнения.
Если бы вы использовали литерал вместо размера вашего массива, то есть int x[5];
, тогда sizeof
было бы оценено во время компиляции.
Если бы код был скомпилирован как C ++, тогда const был бы истинным const и поэтому был бы доступен для оценки во время компиляции.