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 printf
sul tuo sistema e, in tal caso, dovresti leggere la documentazione e guardare il codice sorgente per verificare printf
se è disponibile per la tua libreria.
Ad esempio, sul mio Macbook, ottengo l'output 1606416304
con il tuo programma.
Detto questo, quando si passa a float
a una funzione variadica, float
viene passato come a double
. Quindi, il tuo programma equivale ad aver dichiarato a
come 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 double
risultano essere 0, che potrebbe essere il motivo per cui hai ricevuto 0
come output della tua printf
chiamata.
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