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 :

Tableau de pointeurs - Débutant -


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut Tableau de pointeurs - Débutant -
    Bonjour à tous,

    Je débute en C++ et j'avoue que je patauge dans certains cas pourtant simples.
    Ci-dessous un exemple de ce que souhaite faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	struct T_exemple {
    		short a,b;
    	};
    	T_exemple* extrait[5];
    	for (i=0; i<5; i++)
    	{
    		T_exemple* extrait[i] = new T_exemple;
    	}
    Je voudrais obtenir extrait[5], tableau de 5 pointeurs sur des T_exemple crées dynamiquement.
    Pourquoi le compilateur ne veut-il rien savoir ?

    Squale69

  2. #2
    Membre éprouvé
    Inscrit en
    Novembre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 129
    Par défaut
    la ligne T_exemple* extrait[i] = new T_exemple; est interprété comme une declaration d'une nouvelle variable !!!

    il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extrait[i] = new T_exemple; //j'ai enelvé T_exemple *

  3. #3
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Je suis d'accord ... mais je ne pense pas que l'on puisse faire un new sur un "struct" ...

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Si, aucun problème.
    A 2 détails près, une struct est une classe.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Si, aucun problème.
    A 2 détails près, une struct est une classe.
    Je n'etais pas vraiment sur .. car je n'utilise plus que des classes maintenants ..

    pour la précision

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut
    @ azalsup
    Merci, c'était effectivement bien le problème.
    Squale69

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, et bienvenue sur le forum.

    Ceci dit, il me semble important d'attirer une fois de plus l'attention sur le fait qu'il faut de sacrément bonnes raisons pour envisager l'allocation dynamique ou les tableaux "C style" en C++.

    D'abord, il faut être conscient des limitations propres aux tableaux C style, qu'ils soit "statiques" (donc déclarés sous la forme de MonType tab[10]; ) ou "dynamiques" (donc déclarés sous la forme de MonType *tab=new MonType[n]; ) - dont la principale est sans doute de nécessiter un espace contigu en mémoire suffisant pour y placer le nombre d'éléments souhaité - et qu'il est souvent intéressant de leur préférer des structures dynamiques (pile, tas, liste, arbre binaire, en fonction des besoins de l'application)

    A la lecture du paragraphe précédent, tu vas sans doute penser "mais il perd la boule, le koala, il me dit d'éviter l'allocation dynamique, et pourtant, il me conseille tout de suite après de préférer... les structures dynamiques", et tu n'auras pas tord, jusqu'à ce que tu aies lu le conseil suivant: Penser à utiliser autant que possible les possibilités du langage.

    En effet, le C++ fournit une quantité importante de conteneurs, adaptés à un grand nombre de situations et dont tu peux avoir un aperçu dans cette entrée dans la FAQ.

    De manière générale, tu peux estimer que, même si tu as besoin d'un tableau de taille tout à fait fixe et connue à l'avance, la classe vector, disponible dans l'espace de noms std grâce à l'inclusion du fichier d'en-tête <vector> sera le plus souvent une alternative majeure aux tableaux C style.

    Tu pourra d'ailleurs constater que, si le but de ton tableau de pointeurs est, tout simplement, de te permettre de savoir si le Nieme élément existe, ces différentes classes te permettent de supprimer un élément tout en contournant - à ton niveau - l'écueil dû à la gestion dynamique de la mémoire.

    On ne le répétera jamais assez, mais le C++ est un langage tout à fait différent du C, même s'il est basé sur celui-ci.

    Il est donc important d'éviter toutes les pratiques issues au C pour lesquelles une alternative existe en C++, ces pratiques n'étant le plus souvent admises que dans un soucis de compatibilité.

    Une bonne partie des cas nécessitant l'utilisation des pointeurs en C - et de leur pendant l'allocation dynamique - fait partie des pratiques à éviter.

    Au final, on n'utilisera plus les pointeurs en C++ que dans quelques cas bien particuliers:
    • Quand il s'agit de mettre en oeuvre un comportement polymorphique
    • Quand le membre d'une classe doit survivre à la destruction de l'instance dans laquelle il est créé
    • Quand il s'agit de gérer une appartenance cyclique: quand la classe A doit disposer d'un membre de type B et que la classe B doit faire référence... à l'élément de type A qui le contient comme dans l'exemple suivant
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      class B;
      class A
      {
          /*...*/
          B membre;
      };
      class B
      {
          /*...*/
          A* parent;
      };

    Parmis les trois cas cités, seuls les deux premiers nous inciteront peut être à avoir recours à l'allocation dynamique de la mémoire (et je te rappelle que l'utilisation de pointeurs et de la gestion de l'allocation dynamique sont sans doute les deux pratiques qui risquent le plus de mener à des catastrophes en C... tu comprend donc pourquoi on préférera les éviter autant que faire se peut )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/02/2007, 00h06
  2. Tableau de pointeurs sur objets
    Par bassim dans le forum C++
    Réponses: 11
    Dernier message: 13/12/2005, 19h45
  3. [GCC] Tableau de pointeurs pour accès multiples en asm
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 12/12/2005, 08h47
  4. tableau de pointeurs
    Par seal3 dans le forum C++
    Réponses: 7
    Dernier message: 01/11/2005, 20h51
  5. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19

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