Técnicamente hablando no existe el printf , cada biblioteca implementa la suya propia y, por lo tanto, su método para tratar de estudiar printfel comportamiento haciendo lo que está haciendo no será de mucha utilidad. Podría estar intentando estudiar el comportamiento de printfen su sistema, y si es así, debería leer la documentación y mirar el código fuente para ver printfsi está disponible para su biblioteca.
Por ejemplo, en mi Macbook, obtengo la salida 1606416304con su programa.
Habiendo dicho eso, cuando pasas a floata una función variada, floatse pasa como a double. Entonces, su programa equivale a haber declarado acomo double.
Para examinar los bytes de a double, puede ver esta respuesta a una pregunta reciente aquí en SO.
Vamos a hacer eso:
#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;
}
Cuando ejecuto el programa anterior, obtengo:
size of double: 8, int: 4
00 00 00 00 00 4a 93 40
Entonces, los primeros cuatro bytes doubleresultaron ser 0, que puede ser la razón por la que obtuviste 0como resultado de tu printfllamada.
Para obtener resultados más interesantes, podemos cambiar un poco el programa:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 42;
printf("%d %d\n", a, b);
return 0;
}
Cuando ejecuto el programa anterior en mi Macbook, obtengo:
42 1606416384
Con el mismo programa en una máquina Linux, obtengo:
0 1083394560