Citation
oliv
Voici mon code:
main ()
{
float var1=409;
float var2=924;
float *mem1=&var1;
float *mem2=&var2;
printf("valeur de *mem1 =%f et *mem2=%f\n",mem1,mem2);
printf("fini\n");
}
Voici se qui m est affiche a l ecran:
valeur de *mem1 =-1.997697 et *mem2 =2.083954
mem1 et mem2 sont des pointeurs. On peut considérer, en première approche et sur les architectures de type PC, que se sont des entiers de 32 (64) bits (attention, cette assertion n'est pas portable !). Les pointeurs peuvent contenir
l'adresse d'une donnée de type float (dans le cas présent, l'adresse de, respectivement, var1 et var2).
*mem1 et *mem2 représente la valeur sur laquelle mem1 et mem2 pointe, c'est à dire le contenu de var1 et var2, dans le cas présent les valeurs
flottante 409 et 924.
Ton printf affiche la valeur de mem1 et mem2 qui sont des pointeurs (en première approche des entiers) sur un format flottant, d'où les valeurs bizarres que tu observes.
Tu as découvert les limites de la solution que te propose cedric35, avec un format %d, le bit signe est interprété, une meilleure solution serait d'utiliser %u pour ne pas interpréter le bit signe. Mais le programme n'est pas portable sur des architectures qui utilisent d'autres systèmes d'adressage (en particulier les gros calculateurs scientifiques).
La seule solution valable, c'est d'afficher la valeur d'un pointeur avec le format d'un pointeur: %p. L'affichage se fera en hexa, mais portable sur d'autres architectures.
..................
Parce qu'il avait une clôture à utiliser, l'homme invente la propriété privée. --- F. Cavanna
Poste le Sunday 10 April 2005 19:16:50