Посмотрите на следующий код:
#include <stdio.h>
int main(void)
{
int i = 1;
printf("%lu\n", sizeof(int[++i]));
printf("%d", i);
}
Я тестировал оператор sizeof
, потому что вычисляются операнды типа массива переменной длины - Я был бы рад, если бы кто-нибудь прояснил это как ну, но вопрос в другом .
6.5.3.4 / 2
Оператор sizeof возвращает размер (в байтах) его операнда, который может быть выражением или именем в скобках типа. Размер определяется типом операнда. Результат - целое число. Если тип операнда является массивом переменной длины, операнд оценивается; в противном случае операнд не оценивается, и результатом является целочисленная константа .
Вывод приведенного выше кода на G CC выглядит следующим образом:
8
2
Может кто-нибудь объясните пожалуйста откуда эта 8? Превращается ли массив в указатель? Также дайте пояснения по части массива переменной длины.