C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

problème de compréhension sur les pointeurs...

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
thitou
Guest





PostPosted: Thu Aug 05, 2004 9:20 pm    Post subject: problème de compréhension sur les pointeurs... Reply with quote



Bonjour a tous,

j'ai un *petit* problème de compréhension sur les pointeurs.

Voici mon code :

void maFonction(int **varEntiere)
{
*varEntiere = (int *)malloc(1000);
printf("Adresse d'allocation: %pn", *varEntiere);
}

int main(void)
{
int *varEntiere = NULL;

printf("Adresse du pointeur: %pn", &varEntiere);
maFonction(&varEntiere);
printf("Valeur récupérée: %pn", varEntiere);
}

Il fonctionne mais je ne comprends pas pourquoi il faut un pointeur
sur pointeur dans la fonction.

Pourquoi ne fait on pas : printf("Adresse du pointeur: %pn",
varEntiere);

Qu'obtiens t'on en faisant cela ?

J'ai bien compris que pour modifier le contenu de la variable pointée
par le pointeur il fallait le deférencer par l'étoile.

Et que pour initialiser le pointeur il lui faut une adresse : malloc
retourne une adresse on aurait aussi pu faire :

varEntiere = &autreVariable

Ensuite je ne comprend pas pourquoi on lui passe l'adresse et pourquoi
on a un pointeur de pointeur, je pensais qu'il fallait juste changer
l'adresse qu'il contient, comme quand on fait précédemment.

void maFonction(int *varEntiere)
{
varEntiere = (int *)malloc(1000);
printf("Adresse d'allocation: %pn", &varEntiere);
}

int main(void)
{
int *varEntiere = NULL;

printf("Adresse du pointeur: %pn", varEntiere);
maFonction(varEntiere);
printf("Valeur récupérée: %pn", varEntiere); // = 0x00
// il semblerait que la variable ne soit changer que localement
est-ce possible que le pointeur soit passer par valeur ?
}

Je pense que mon problème existenctiel sur les pointeurs vient de la,
alors si vous pouvez m'aider je serai ravi.

Merci encore.

thierry
Back to top
Fabien LE LEZ
Guest





PostPosted: Thu Aug 05, 2004 9:55 pm    Post subject: Re: problème de compréhension sur les pointeurs... Reply with quote



On 5 Aug 2004 14:20:34 -0700, [email]thitou (AT) bigfoot (DOT) com[/email] (thitou):

Quote:
Voici mon code :

void maFonction(int **varEntiere)
{
*varEntiere = (int *)malloc(1000);
printf("Adresse d'allocation: %pn", *varEntiere);

Je pense que tu t'es trompé de forum, et que tu voulais poster sur
fr.comp.lang.c, non ?

Pour répondre à ta question, c'est assez simple (si tu as lu le thread
"question sur const") : tu veux modifier un objet (de type "int*"), tu
dois donc le passer soit par référence non-const, soit par pointeur
non-const.

N'oublie pas qu'un pointeur a une double personnalité : parfois objet
à part entière, parfois une autre façon de désigner une référence.

En passant, je note que tu as la manie d'ajouter des casts explicites.
Comme l'a dit Alexandre, on n'utilise un cast explicite que quand on a
une bonne raison pour.

Je peux me tromper (ça fait des années que je n'ai pas fait de C),
mais le code C correct pour allouer 256 entiers est :

*varEntiere = malloc (256 * sizeof (int));

Et en C++ ça donne :

*varEntiere= new int [256];

.... mais bien entendu, on préférera utiliser std::vector<int> dans du
code de production.


--
;-)

Back to top
Alexandre Bacquart
Guest





PostPosted: Thu Aug 05, 2004 10:28 pm    Post subject: Re: [HS] problème de compréhension sur les pointeurs... Reply with quote



Fabien LE LEZ wrote:

Quote:
On 5 Aug 2004 14:20:34 -0700, [email]thitou (AT) bigfoot (DOT) com[/email] (thitou):

Je peux me tromper (ça fait des années que je n'ai pas fait de C),
mais le code C correct pour allouer 256 entiers est :

*varEntiere = malloc (256 * sizeof (int));

Oui, on préférera sizeof(**varEntiere) pour alléger la maintenance, mais
c'est ça.


--
Tek

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.