Tecnicamente parlando non v'è la printf , ogni implementa una propria biblioteca, e, quindi, il metodo di cercare di studio printf's comportamento facendo quello che state facendo non sta per essere di grande utilità. Potresti provare a studiare il comportamento di printfsul tuo sistema e, in tal caso, dovresti leggere la documentazione e guardare il codice sorgente per verificare printfse è disponibile per la tua libreria.
Ad esempio, sul mio Macbook, ottengo l'output 1606416304con il tuo programma.
Detto questo, quando si passa a floata una funzione variadica, floatviene passato come a double. Quindi, il tuo programma equivale ad aver dichiarato acome file double.
Per esaminare i byte di a double, puoi vedere questa risposta a una domanda recente qui su SO.
Facciamolo:
#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;
}
Quando eseguo il programma sopra, ottengo:
size of double: 8, int: 4
00 00 00 00 00 4a 93 40
Quindi, i primi quattro byte di doublerisultano essere 0, che potrebbe essere il motivo per cui hai ricevuto 0come output della tua printfchiamata.
Per risultati più interessanti, possiamo cambiare un po 'il programma:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 42;
printf("%d %d\n", a, b);
return 0;
}
Quando eseguo il programma sopra sul mio Macbook, ottengo:
42 1606416384
Con lo stesso programma su una macchina Linux, ottengo:
0 1083394560