Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
pointeur en C
Envoyé par: oliv

Salut a tous

Je ne comprend pas la valeur de mes pointeurs, j avais cru comprendre que les adresses memoire commensaient toujours par "*0", mais avec mon code cela n est pas le cas.
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
fini

merci pour l aide
et A+

Il n'y a de dieu que DIEU, et Mouhammed est le messager de DIEU.

Poste le Sunday 10 April 2005 18:10:17
Répondre     Citer    
Re: pointeur en C
Envoyé par: ceric35

printf("valeur de *mem1 =%f et *mem2 =%f\n",*mem1,*mem2);

-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Sunday 10 April 2005 18:16:13
Répondre     Citer    
Re: pointeur en C
Envoyé par: oliv

en modofiant mon programme par la proposition de "ceric35" j obtiens le resultat suivant:
valeur de *mem1 =429.000000 et *mem2 =924.000000
fini

Mais quelle est la signification des valeurs precedentes? Les valeur actuelle etent les adresse memoire des variables var1 et var2.

A+



Il n'y a de dieu que DIEU, et Mouhammed est le messager de DIEU.

Poste le Sunday 10 April 2005 18:47:01
Répondre     Citer    
Re: pointeur en C
Envoyé par: ceric35

Essaie avec
printf("valeur de *mem1 =%d et *mem2 =%d\n",mem1,mem2);

Les valeurs precedentes sont les adresses memoires
convertits en flottant !

-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Sunday 10 April 2005 18:49:02
Répondre     Citer    
Re: pointeur en C
Envoyé par: oliv

ne faudrait-il pas plustot utiliser %x afin d obtenir les adresses en hexadecimal?
resultat avec %x:
valeur de *mem1 =bffff6a4 et *mem2 =bffff6a0
fini

resultat avec %d:
valeur de *mem1 =-1073744220 et *mem2 =-1073744224
fini
Dans ce drenier exemple on obtient des adresse memoire en valeur negative, cela me semble faux et ilogique, mais je ne suis pas un expert.

Merci

A+

Il n'y a de dieu que DIEU, et Mouhammed est le messager de DIEU.

Poste le Sunday 10 April 2005 19:00:29
Répondre     Citer    
Re: pointeur en C
Envoyé par: ceric35

Exact , %x

on les affiche comme ca en fait
printf("valeur de *mem1 =0x%x et *mem2 =0x%x\n",mem1,mem2);

valeur de *mem1 =0xbffff6a4 et *mem2 =0xbffff6a0

-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Sunday 10 April 2005 19:12:29
Répondre     Citer    
Re: pointeur en C
Envoyé par: abgech

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
Répondre     Citer    
Re: pointeur en C
Envoyé par: abgech

Excuses un peu l'aspect trop didactique de mon dernier post. Mais j'ai longtemps enseigné la programmation dans une école d'ingénieurs et, quoique à la retraite, on ne se refait pas !

J'ai aussi toujours pensé que l'on devrait commencer l'apprentissage de la programmation (après un très solide cours d'algorithmique cela va de soi) par un l'assembler d'une architecture quelconque. Après ceci, les étudiants n'aurait absolument plus aucun problème avec les pointeurs, au contraire, ils se demanderaient comment programmer sans les utiliser.

..................
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:23:52
Répondre     Citer    
Re: pointeur en C
Envoyé par: oliv

Pour "abgech" ton post me va tres bien (meme si il est calque sur une logique didactique), car si je pose des questions sur les forums c est pour avoir une solution a un probleme mais aussi et surtout pour aprendre.
Et avec des explications comme les tiennes je suis comble.

Donc Merci et surtout A+

Olivier

Il n'y a de dieu que DIEU, et Mouhammed est le messager de DIEU.

Poste le Sunday 10 April 2005 20:02:02
Répondre     Citer    
Re: pointeur en C
Envoyé par: Sve@r

Va donc sur mon site "[fr.lang;free.fr"]; rubrique "mes cours"
J'ai écrit un bouquin d'apprentissage du C avec un super-chapitre sur "les pointeurs" où j'explique le "pourquoi float *", etc...

Poste le Monday 11 April 2005 09:57:54
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
pointeur en C
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons