Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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)

Nfjord a écrit :
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... roll

Merci !


It's always a long day, 86,400 won't fit into a short.

Hors ligne