#1 Le 03/07/2012, à 11:21
- Nfjord
Modification de variables locales via les pointeurs (langage C)
Bonjour,
J'ai besoin d'un petit rafraîchissement de mémoire quand à l'accès et la modification de variables locales entre fonctions.
Je déclare une variable v, locale à la fonction f1. Je veux modifier cette variable dans la fonction f2. Comme v est locale à f1, je dois la passer en paramètre d'entrée à f2 puis f2 doit retourner le résultat à f1. Voici le code :
int f1() {
int v;
v = 0;
v = f2(v);
printf("v = %d\n", v);
return EXIT_SUCCESS;
}
int f2(int v) {
v = v + 1;
return v;
}
Jusqu'ici pas de soucis, le printf affiche bien la valeur '1'. Maintenant, pour une raison ou une autre, je ne veux plus que f2 retourne la valeur de v à f1 mais je veux quand même pouvoir modifier la valeur de v dans f2. Du coup, j'essaye avec les pointeurs et c'est là que je bloque. Voici le code :
int f1() {
int v;
int *pv; // pointeur vers v
pv = &v;
v = 0;
f2(pv);
printf("v = %d\n", v);
return EXIT_SUCCESS;
}
int f2(int *pv) {
int b;
b = &pv; // je veux récupérer le contenu du
// pointeur pv (c'est-à-dire la valeur
// de la variable v déclarée dans f1)
printf("b = %d\n", b); // ici b n'affiche pas '0' mais une valeur quelconque
// (je pense qu'il s'agit d'une adresse) : b n'a pas
// récupéré le contenu de la case mémoire pointée
// par pv (c'est-à-dire la valeur de v)
b = b + 1;
&pv = b; //je veux mettre le résultat de l'addition dans la case
// pointée par pv (c'est-à-dire modifier la variable v déclarée dans f1)
// gcc me génère une erreur ici, il n'aime pas la partie
// gauche de l'affectation (le '&pv').
return EXIT_SUCCESS;
}
Voilà où je bloque. Comment faire alors pour pouvoir modifier le contenu pointé par pv pour que le printf dans f1 m'affiche la valeur '1' ? Est-ce possible sans avoir à utiliser le return (exemple précédent) ?
It's always a long day, 86,400 won't fit into a short.
Hors ligne
#2 Le 03/07/2012, à 11:41
- dev/random
Re : Modification de variables locales via les pointeurs (langage C)
int f2(int *pv) { int b; b = &pv; // je veux récupérer le contenu du (...)
Ce code ne compile pas cez moi.
Tu as confondu l'opérateur '&', prendre l'adresse, avec '*', utiliser l'adresse pointée.
Remplace "&pv" par "*pv" dans f2()..
667, the neighbour of the beast..
Hors ligne
#3 Le 03/07/2012, à 12:17
- Nfjord
Re : Modification de variables locales via les pointeurs (langage C)
Effectivement, maintenant ça marche... Comment ai-je pu passer à côté de ça...
Merci !
It's always a long day, 86,400 won't fit into a short.
Hors ligne