Techniquement parlant, il n'y a pas de the printf , chaque bibliothèque implémente la sienne, et par conséquent, votre méthode pour essayer d'étudier printfle comportement de ce que vous faites ne sera pas d'une grande utilité. Vous pourriez essayer d'étudier le comportement de printfsur votre système, et si tel est le cas, vous devriez lire la documentation et regarder le code source pour savoir printfs'il est disponible pour votre bibliothèque.
Par exemple, sur mon Macbook, j'obtiens la sortie 1606416304avec votre programme.
Cela dit, lorsque vous passez a floatà une fonction variadique, le floatest passé comme a double. Donc, votre programme équivaut à avoir déclaré en atant que fichier double.
Pour examiner les octets de a double, vous pouvez voir cette réponse à une question récente ici sur SO.
Faisons cela:
#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 de la doublese sont avérés être 0, ce qui peut être la raison pour laquelle vous avez obtenu 0la sortie de votre printfappel.
Pour 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