Pointeur...

Résolu
CherryBlondy Messages postés 7 Date d'inscription   Statut Membre -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je me tourne à nouveau vers vous pour un p'tit problème ^^

voilà dans un sous programme je declare un pointeur du type int *a

et j'imerais que lorsque je retroune dans le main je lui affecte la valeur de b.

le problème c'est que dans mon sous programme lorsque j'écrit :

*a = b;

sachant que dans moin main j'appelle la procédure en placant &a dans les paramètres.

bah il aime po =( et si j'enlève l'étoile, il aime mais là, c'est moi qui aime pas puisqu'il me renvoie pas la valeur de b du le sous pogramme.

J'espère avoir était assez clair.

d'avance merci beaucoup

bonne soirée =)
Configuration: Windows XP
Firefox 3.0.5

2 réponses

  1. Marco la baraque Messages postés 1030 Statut Contributeur 329
     
    Bonjour CherryBlondy,
    Crée ton pointeur dans ton main, passe ensuite son adresse (&a) à ton sous-programme (pas besoin de le retourner), en principe ça devrait fonctionner.

    Cordialement,
    1
    1. CherryBlondy Messages postés 7 Date d'inscription   Statut Membre
       
      une fois que j'ai fait ça , comment je fais pour renvoyer dans le main une valeur obtenue dans ce sous programme ?

      merci déjà pour ton aide =)
      0
    2. CherryBlondy Messages postés 7 Date d'inscription   Statut Membre
       
      Je te montre mon bout de code :

      void exemple(int *hauteur, int *largeur)
      {
      //declaration des variables
      int lig, col;

      scanf("%dX%d", hauteur, largeur);
      lig = *hauteur;
      col = *largeur;

      dans mon main :

      int *largeur, *hauteur;
      exemple(&hauteur, &largeur);
      0
      1. Marco la baraque Messages postés 1030 Statut Contributeur 329 > CherryBlondy Messages postés 7 Date d'inscription   Statut Membre
         
        Bonsoir,
        Regarde mon exemple plutôt :
        #include <stdio.h>
        #include <stdlib.h>
        
        void getValues(int*, int*);
        
        int main(int argc, char *argv[])
        {
          int l, h;
          getValues(&l, &h);
          printf("largeur = %d, hauteur = %d\n", l, h);
          
          system("PAUSE");	
          return 0;
        }
        
        void getValues(int* l, int* h) {
             scanf("%dX%d", l, h);    
        }
        


        Quand tu passes une variable par pointeur, tu n'as pas besoin de la retourner par ta fonction car c'est la variable elle-même qui est modifiée dans le sous-programme (c'est un peu comme si tu étendais la portée de la variable). Ici tu vois bien que dans la fonction getValues, on stocke les valeurs entrées par l'utilisateur dans l et h. Sans retourner ces valeurs, on y a accès depuis la fonction main (on affiche les nouvelles valeurs avec printf).

        Cordialement,
        0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    void exemple(int *hauteur, int *largeur)
    {
    //declaration des variables
    int lig, col;

    scanf("%dX%d", hauteur, largeur);
    lig = *hauteur;
    col = *largeur;
    }
    dans mon main :

    int *largeur, *hauteur;
    exemple(&hauteur, &largeur);

    Quelle HORREUR !!!
    dans le main largeur et hauteur son des pointeurs. lors de l'appel de l'exemple, tu passes l'adresse de ces pointeurs, soit un truc similaire à des int**.
    Il faut raisonner en type. Il faut bien voir qu'un pointeur est une variable comme une autre, il a juste un rôle particulier avec l'opérateur * ou [].
    Largeur et hauteur sont des variables, et leur type est (int*) c'est à dire que largeur est une variable qui contient une adresse mémoire d'un champ de type int.
    0