Нулевые массивы не допускаются, поэтому код не должен компилироваться.
Если у вас есть компилятор, который принимает его как нестандартное расширение, то результат sizeof
зависит только от типа выражения; в этом случае double
. Выражение не оценивается (поэтому не имеет значения, связано ли это с наличием доступа к внешнему массиву или другим неопределенным поведением), и его тип тот же, независимо от того, имеет ли он определенное значение.
Если вы хотите задать размер массива, sizeof(arr)
, это будет зависеть от того, как компилятор решил иметь дело с нестандартными массивами нулевого размера. Будучи нестандартными, стандартная спецификация их размера не существует.
Из-за UB .. – Maroun
'обр [0],' обр [1], 'обр [1000]' - любой из тех, будет 'double', и, следовательно, одного и того же размера. Что вы ожидали? –
'arr [0]' является незаконным, за исключением нескольких очень специальных контекстов (которые отличаются от C и C++). –