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 :

pointeurs sur pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Par défaut pointeurs sur pointeurs
    Bonjours à tous!
    j'ai une petite question;au fait je suis sur un projet en langage C mais j'en ai plus fait depuis des années.
    j'essaye de revoir les arbres et les listes doublement chainées mais je ne comprends pas pourquoi il faut utiliser comme argument des fonctions un pointeur sur pointeur.
    voici un code récupérer sur le site dans le cours sur les arbres en C:
    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
     
         void addNode(node **tree[/HR], unsigned int key)
    {
        node *tmpNode;
        node *tmpTree = *tree;
     
        node *elem = malloc(sizeof(node));
        elem->key = key;
        elem->left = NULL;
        elem->right = NULL;
     
        if(tmpTree)
        do
        {
            tmpNode = tmpTree;
            if(key > tmpTree->key )
            {
                tmpTree = tmpTree->right;
                if(!tmpTree) tmpNode->right = elem;
            }
            else
            {
                tmpTree = tmpTree->left;
                if(!tmpTree) tmpNode->left = elem;
            }
        }
        while(tmpTree);
        else  *tree = elem;
    }
    Je sais que si on ne passe pas à une fct une adresse on travaille sur une copie .
    Ce qui me derrnage c'est que dans le cours je vois que dans certaines fonctions un pointeur suffit alors que dans d'autre il faut un pointeur sur un pointeur..?
    etant donné que la structure créée est un arbre on aurait peut etre pu passé en argument un pointeur uniquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
         void addNode(node *tree[/HR], unsigned int key)
    {
        node *tmpNode;
        node *tmpTree = *tree;[/HR]    //Cette ligne va rester la meme je pense!
     
        node *elem = malloc(sizeof(node));
        elem->key = key;
        elem->left = NULL;
        elem->right = NULL;
    Bref je pense que je suis en train de dire n'importe quoi,alors si quelqu'un pouvais m’éclaircir un peu les idée ce serait trop sympas
    et j’espère surtout que mon post pourras servir a d'autres personnes!!!
    Bonne journée!

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    node est un noeud et node * est un arbre/pointeur sur le noeud-racine.
    Ainsi si on veut qu'une fonction les modifie, il faut leur passer un pointeur (respectivement node * et node **).

    Or ta fonction d'insertion peut changer le noeud-racine, ainsi tu va devoir changer le "pointeur sur le noeud-racine", d'où l'utilisation de node **.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. allocation et pointeur sur pointeur
    Par noobC dans le forum C
    Réponses: 7
    Dernier message: 13/11/2007, 19h00
  2. pointeur sur pointeur générique
    Par j0o0 dans le forum C
    Réponses: 14
    Dernier message: 10/09/2007, 18h52
  3. les pointeurs sur pointeurs ne m'aiment pas :/
    Par GhostNemo dans le forum C
    Réponses: 3
    Dernier message: 17/12/2006, 23h10
  4. Réponses: 6
    Dernier message: 02/11/2006, 16h44
  5. pointeur sur pointeur
    Par gaut dans le forum C
    Réponses: 3
    Dernier message: 01/11/2005, 21h30

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