IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Donner l'adresse d'un pointeur à un autre pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut Donner l'adresse d'un pointeur à un autre pointeur
    Bonjour,

    Je me demande comment transférer une adresse de pointeur à un autre pointeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct{
       int age;
    }Membre;
     
    void Modif_Membre(Membre **);
     
    int main()
    {
     
       Membre *pointeur=NULL;
     
       pointeur=(Membre*)malloc(sizeof(Membre)*1); // J'ai un tableau de une strucutre.
     
       Modif_Membre(&pointeur);
     
       return 0;
     
    }
     
    void Modif_Membre(Membre **pointeur)
    {
       Membre *pnew=(Membre*)malloc(sizeof(Membre)*2); // Je crée un tableau qui contiendra 2 structures
     
       // A présent j'aimerai faire basculer le premier tableau dans le 2eme, et encoder la 2eme structure. Dans le but de ne pas faire de return et d'utiliser le même pointeur pour tout mon programme.
       *pnew=**pointeur;
     
       // Ensuite je libére l'ancien
       free(*pointeur);
     
       // Et maintenant je transfert l'adresse de l'ancien pointeur vers le nouveau
       pointeur=&pnew;
     
    }
    Mais bien sur cela ne fonctionne pas, que je libère ou non l'ancien, cela ne change rien. L'erreur doit etre plus profonde que ça.

    Le problème est qu je ne sais pas ou. Je dirai même plutôt : est-ce possible de transférer l'adresse d'un pointeur à un autre ?

    Merci

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    Je pense effectivement que le problème est profond

    Je ne comprend pas pourquoi tu veux passer par un pointeur intermédiaire pour tout de même modifier le premier.

    Tu peux simplement faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct{
       int age;
    }Membre;
     
    void Modif_Membre(Membre *);
     
    int main()
    {
       Membre m;
       m.age = 10;
       printf("%d\n", m.age); // 10
       Modif_Membre(&m);
       printf("%d\n", m.age); // 15
       return 0;
     
    }
     
    void Modif_Membre(Membre *p)
    {
      p->age = 15;
    }

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Si on parle uniquement du contenu du titre, "Donner l'adresse d'un pointeur à un autre pointeur", il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int a;
    int *p1 = NULL;
    int **p2=NULL;
    p1 = &a;
    p2 = &p1;
     
    // ou peut etre :
    int *p3;
    p3 = p1;
    Mais ce n'est sûrement pas ce que tu veux faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeur=(Membre*)malloc(sizeof(Membre)*1); // J'ai un tableau de une strucutre.
    By the way, il n'est pas nécessaire de caster le retour de malloc.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void Modif_Membre(Membre **pointeur)
    {
        Membre *pnew=(Membre*)malloc(sizeof(Membre)*2); // Je crée un tableau qui contiendra 2 structures
     
       // A présent j'aimerai faire basculer le premier tableau dans le 2eme, et encoder la 2eme structure. Dans le but de ne pas faire de return et d'utiliser le même pointeur pour tout mon programme.
       *pnew=**pointeur;
     
       // Ensuite je libére l'ancien
       free(*pointeur);
     
       // Et maintenant je transfert l'adresse de l'ancien pointeur vers le nouveau
       pointeur=&pnew;
    }
    En fait, tu souhaites que ton pointeur passé en paramètre ne pointe plus vers un emplacement mémoire où de l'espace a été réservé pour une structure ; mais vers un emplacement réservé pour 2 structures. La première structure ne "bouge" pas et tu as désormais la place pour une seconde structure et ainsi dans ton main faire pointeur[1] ? Si oui, tu devrais regarder du côté de la fonction realloc().

Discussions similaires

  1. Pointeur ou autre technique
    Par superomrom dans le forum MATLAB
    Réponses: 13
    Dernier message: 19/07/2007, 17h35
  2. Donner une adresse à un site intranet
    Par casawi dans le forum Apache
    Réponses: 1
    Dernier message: 04/07/2007, 14h56
  3. PhotoImage : donner l'adresse en relatif sous linux
    Par damienklotz dans le forum Tkinter
    Réponses: 3
    Dernier message: 14/05/2007, 22h48
  4. Donner une adresse à Fwrite
    Par Mike888 dans le forum C
    Réponses: 8
    Dernier message: 13/01/2006, 09h26
  5. Donner le focus à un JPanel dans un autre JPanel
    Par Azanael dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 21/06/2005, 23h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo