Использование квалификатора типа const
не делает что-то постоянным.Константа в C имеет свое собственное определение.
См. § 6.7.3 ¶ 6 стандарта C11 для описания ключевого слова const
:
Если предпринята попыткачтобы изменить объект, определенный с помощью const-квалифицированного типа, используя lvalue с не-const-квалифицированным типом, поведение не определено.Если предпринята попытка обратиться к объекту, определенному с типом, определенным с помощью volatile, с использованием lvalue с типом, не определенным с помощью volatile, поведение не определено.
Что вам нужно, так этопостоянное выражение;подробности см. в § 6.6 C11.
Если вы действительно задаетесь вопросом, не является ли "WTF справился с квалификатором const
?"а скорее, каково правильное решение для вашего кода, ответ, скорее всего, просто не будет указывать размер массива:
float user_array[] = {5.1, 7.2, 5.1, 8.45, 23.0, 67.123, 5.1};
Это обычно считается хорошей практикой, поскольку на самом деле делает ваш код немного более устойчивым.