Технически говоря, нет printf
, каждая библиотека реализует свою собственную, и, следовательно, ваш метод изучения поведения printf
, выполняя то, что вы делаете, не собирается быть очень полезным. Возможно, вы пытаетесь изучить поведение printf
в вашей системе, и если это так, вам следует прочитать документацию и посмотреть исходный код printf
, если он доступен для вашей библиотеки.
Например, на моем Macbook я получаю вывод 1606416304
с вашей программой.
Сказав, что когда вы передаете float
в функцию с переменным числом, float
передается как double
. Итак, ваша программа эквивалентна объявлению a
как double
.
Чтобы проверить байты double
, вы можете увидеть этот ответ на недавний вопрос здесь, на SO.
Давайте сделаем это:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
unsigned char *p = (unsigned char *)&a;
size_t i;
printf("size of double: %zu, int: %zu\n", sizeof(double), sizeof(int));
for (i=0; i < sizeof a; ++i)
printf("%02x ", p[i]);
putchar('\n');
return 0;
}
Когда я запускаю вышеуказанную программу, я получаю:
size of double: 8, int: 4
00 00 00 00 00 4a 93 40
Итак, первые четыре байта double
оказались равными 0, поэтому, возможно, вы получили 0
в качестве результата вашего printf
вызова.
Для более интересных результатов мы можем немного изменить программу:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 42;
printf("%d %d\n", a, b);
return 0;
}
Когда я запускаю вышеуказанную программу на своем Macbook, я получаю:
42 1606416384
С той же программой на компьютере с Linux я получаю:
0 1083394560