 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
thitou Guest
|
Posted: Thu Aug 05, 2004 9:20 pm Post subject: problème de compréhension sur les pointeurs... |
|
|
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
|
Posted: Thu Aug 05, 2004 9:55 pm Post subject: Re: problème de compréhension sur les pointeurs... |
|
|
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
|
Posted: Thu Aug 05, 2004 10:28 pm Post subject: Re: [HS] problème de compréhension sur les pointeurs... |
|
|
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 |
|
 |
|
|
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
|
|