@unit_911

Почему выводится ноль при использовании несоответствующего спецификатора в printf()?

int i = 342;
printf("result = %f", i);

Выводит
result = 0.000000

Хотя немного измененный код
int i = 342;
float f = i;
printf("result = %f", f);

Выводит верную строку
result = 342.000000

Почему приведение типов в функции printf() работает некорректно? Ясно, что использовать спецификатор, несоответсвующий типу данных, нежелательно, но почему значение все же интерпретируется неправильно?
P.S. Да, это не С++, но непонятно, как прикрепить тег С к вопросу.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что в функции printf вообще нет приведения типов.
Она просто берёт переданные данные и трактует их согласно спецификации формата.
То есть, в вашем случае выполняется не (float)i, а *((float *)&i).
If any argument after default argument promotions is not the type expected by the corresponding conversion specifier, or if there are fewer arguments than required by format, the behavior is undefined.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы