Techniquement parlant, il n'y a pas le site printf
chaque bibliothèque implémente la sienne, et donc, votre méthode d'essayer d'étudier printf
En faisant ce que vous faites, vous ne serez pas d'une grande utilité. Vous pourriez essayer d'étudier le comportement de printf
sur votre système, et si c'est le cas, vous devriez lire la documentation, et regarder le code source pour printf
s'il est disponible pour votre bibliothèque.
Par exemple, sur mon Macbook, j'obtiens le résultat suivant 1606416304
avec votre programme.
Cela dit, lorsque vous passez un float
à une fonction variadique, le float
est transmis comme un double
. Ainsi, votre programme est équivalent à avoir déclaré a
en tant que double
.
Pour examiner les octets d'un double
vous pouvez voir cette réponse à une question récente ici sur SO.
Faisons ça :
#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;
}
Lorsque j'exécute le programme ci-dessus, j'obtiens :
size of double: 8, int: 4
00 00 00 00 00 4a 93 40
Ainsi, les quatre premiers octets du double
s'est avéré être 0, ce qui peut être la raison pour laquelle vous avez eu 0
comme la sortie de votre printf
appeler.
Pour obtenir des résultats plus intéressants, nous pouvons modifier un peu le programme :
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 42;
printf("%d %d\n", a, b);
return 0;
}
Lorsque j'exécute le programme ci-dessus sur mon Macbook, j'obtiens :
42 1606416384
Avec le même programme sur une machine Linux, j'obtiens :
0 1083394560