Je sais que c'est mauvais et gcc vous donnera un avertissement à ce sujet, mais pourquoi cela fonctionne-t-il (c'est-à-dire les numéros sont imprimés correctement, avec une certaine différence d'arrondi)?Des pointeurs d'impression de résultats bizarres comme flottant dans C
int main() {
float *f = (float*) malloc(sizeof(float));
*f = 123.456;
printf("%f\n", *f);
printf("%f\n", f);
return 0;
}
Edit: Oui, j'utilise gcc avec une machine 32 bits. J'étais curieux de voir quels résultats j'obtiendrais avec d'autres compilateurs.
Je mêlais des choses un peu plus après la suggestion de Christoph:
int main() {
float *f = (float*) malloc(sizeof(float));
*f = 123.456;
printf("%f\n", f); // this
printf("%f\n", *f);
printf("%f\n", f); // that
return 0;
}
Il en résulte la première impression printf une valeur différente de la dernière printf, en dépit d'être identiques.
presque correct: les arguments sont passés par valeur, mais le fait de pousser le valeur – Christoph
vous devez publier la sortie réelle que vous obtenez. Suggérez-vous que le 2ème printf imprime réellement '123' ou quelque chose comme ça? – JustJeff