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 :

int** t; t = new int*[10]; comment y acceder ?


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Par défaut int** t; t = new int*[10]; comment y acceder ?
    Bonjour,

    Voila j'ai dans mon .h une définition d'un tableau de pointeurs vers des entiers int** t;
    Puis dans mon .cc je crée ce tableau ainsi : t = new int*[10];
    Puis je rempli chaque case de mon tableau avec des pointeurs vers des entiers.
    Comment faire pour récuperer d'abord le pointeur de l'entier en position 2 par exemple? Puis l'entier lui même ?

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Salut,

    Je suppose que tu débutes en C/C++ et donc tu cherches à apprendre les bases du maniement, à savoir les tableaux et les pointeurs. C'est très bien.

    Mais n'oublie pas, pour la suite, que tu ne devrais jamais manipuler directement tes tableaux ainsi.
    En C++, il est fortement recommandé de "accorder une responsabilité cohésive à chaque entité" (pour citer un article bien connu ici).
    Autrement dit, plutôt que de manipuler directement ton tableau, tu préfères faire un objet qui contiendra ton tableau et qui permettra d'y accéder sans risque de :
    - lire ou écrire or du tableau
    - ne pas initialiser ton tablea
    - ne pas libérer les ressources
    ...

    Ce petit sermon étant fait, je peux te donner la réponse à ta question.
    Quand tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int** t;
    t = new int*[10];
    tu as alloué un tableau de 10 pointeurs d'entiers et tu as stocké l'adresse de ce tableau dans ton pointeur t;
    Pour obtenir le 4ème élément de ce tableau, tu dois donc écrire :
    bien sur ce quatrième élément est un pointeur d'entier, puisque le tableau est un tableau de pointeurs d'entiers.
    donc on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int* pt4 = t[4]; // ici je crée un pointeur d'entier pt4 et je le fait pointer au même endroit que le quatrième pointeur d'entier du tableau
    pour obtenir l'entier pointé par un pointeur, tu le fais précéder de *, tu peux donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int* pt4 = t[4];  // ligne déjà évoquée ci-dessus
    int i = *pt4; // récupération de l'entier pointé par le pointeur
    ou en abrégé :
    ATTENTION :
    si tu écris seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int** t;
    t = new int*[10];
    int i = *(t[4]);
    alors tu fais une erreur, car tu n'as pas alloué d'espace mémoire pour ton 4ème entier.
    Je m'explique :
    Quand tu écris :
    tu alloue de l'espace pour ton tableau de pointeur d'entiers. Donc tu as en mémoire un tableau de pointeurs, mais ces pointeurs pointent sur rien du tout. Si tu veux pouvoir les utiliser, tu dois les faire pointer sur un espace mémoire existant :
    - soit en réservant cet espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int** t;
    t = new int*[10];
    t[4] = new int;  // ici je réserve un espace pour mon entier
    int i = *(t[4]);
    - soit en les faisant pointer sur un espace déjà existant.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int** t;
    t = new int*[10];
    int j = 7;  // ici je crée un entier j
    t[4] = &j; // ici je fais pointer mon pointeur sur j
    int i = *(t[4]);
    La gestion de la mémoire, c'est un peu compliqué quand tu commençe, mais tu verras ça en présente en réalité pas vraiment de difficulté quand tu es bien rodé.
    Aussi, accroche toi et bonne chance pour ton apprentissage.

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/10/2013, 12h44
  2. Transforrmer un int en array de int
    Par olibara dans le forum C#
    Réponses: 1
    Dernier message: 10/11/2008, 08h59
  3. Réponses: 2
    Dernier message: 22/08/2008, 16h09
  4. comment convertir un int 32 en un int 64 ?
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 17
    Dernier message: 13/06/2007, 11h43
  5. convertir int en Object et int en char
    Par djanos dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2007, 18h58

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