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 :

[Debutant]Tableau de pointeur char (char *)


Sujet :

C++

  1. #1
    Membre du Club Avatar de nephhh
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Points : 62
    Points
    62
    Par défaut [Debutant]Tableau de pointeur char (char *)
    Bonjour à tous ou bonsoir,
    Voila je suis debutant en c++ et et je n'arrive plus à dormir car je ne voit pas
    la difference entre :

    char t[] = "Hello";
    char *p = "Hello";


    dans le 1er sa alloue de la memoire pour 6 caracteres, le second 6 aussi et il alloue une variable de type pointeur (4 octet) supplementaire qui contient l'adresse du 1er caractere.
    Je veut dire par la, pourquoi utiliser un tableau de pointeur de type char au lieu d'un tableau je voit pas en quoi sa change :s (à par user de la memoire suplèmentaire). Enfin merci de m'èclairer un peu, jai chercher beaucoup un peut partout mais je n'ai jamais de reponse trés complete, merci d'avance :-)


    Post Scriptum : Es-ce une question de memoire? (rapiditer,...)

    Enfin je m'esxcuse si cette question à deja etè posèe (jai cherchè d'ailleur dans le forum mais j'ai pt mal chercher enfin si cetais le cas veuiller me pardonner pour ce topic :-) et m'envoyer un lien vers une reference ou autres).
    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Dans ton exemple avec le type char, la différence n'est pas claire.

    En revanche, si tu veux créer un tableau d'entiers (disons 3) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      int t1[] = {1,2,3}; // OK
      int *p1 = {4,5,6}; // Erreur
     
      int *p1 = t1; // OK
      int t2[] = t1; // Erreur
     
      int *p2 = new int[3]; // Tableau dynamique
      int t3[] = new int[3]; // Erreur
     
      delete[] p2; // Libération de la mémoire : ne concerne que les objets et tableaux dynamiques
    Les tableaux avec [] sont pratiques quand il y a peu d'éléments, mais leur taille est limitée et doit être calculable à la compilation (en C++).

    Les pointeurs ne sont pas des tableaux, mais ils permettent (entre autres) de manipuler des tableaux dynamiques (pas de restriction sur la taille mais attention à la gestion de la mémoire).

    La bibliothèque standard C++ propose la classe std::vector<> qui est pratique à utiliser sans imposer de contrainte de mémoire.

    Bonne nuit ?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La première ligne déclare un tableau de 6 caractères et y copie la chaîne "Hello". Tu as donc un tableau de 6 caractères valide auquel tu peux accéder en lecture / écriture sans problème.

    La seconde ligne déclare un pointeur sur caractères, pointeur qui va pointer sur une chaîne littérale très probablement placée dans une zone mémoire en lecture seule ; ce qui est dangereux puisque tu n'as pas déclaré un const char*.

  4. #4
    Membre du Club Avatar de nephhh
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Points : 62
    Points
    62
    Par défaut
    Merci bcp de vos reponses, j'y vois deja plus claire ^^.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu compiles avec GCC en mode -Wwrite-strings, la ligne char *p = "Hello"; fera un warning.
    L'autre ligne n'en fera pas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre du Club Avatar de nephhh
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Points : 62
    Points
    62
    Par défaut
    Merci de vos reponses sa ma aider à y voir plus claire et derniere question (pardonner moi ^^) :

    Mais alors quelle est maintenant la difference entre un tableau de pointeur char et un tableau de string ^^???

    char* chq[] = {"yop","cava","ui"};

    string szchq[] = {"yop","cava","ui"};

    Merci d'avance :-).

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    char* est un simple pointeur, string est une classe complète, avec ses fonctions membres, ses constructeurs et tout...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre du Club Avatar de nephhh
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Points : 62
    Points
    62
    Par défaut
    Merci encore

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    char* chq[] = {"yop","cava","ui"};
    T'as toujours pas compris qu'il fallait jamais écrire un truc pareil ?
    Utilise l'option -Wwrite-strings de GCC pour t'aider.
    Boost ftw

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

Discussions similaires

  1. désallouer un tableau de pointeur de char
    Par marco62118 dans le forum C++
    Réponses: 4
    Dernier message: 16/05/2010, 16h39
  2. Réponses: 1
    Dernier message: 22/12/2009, 11h40
  3. Tableau de pointeurs const char *
    Par matafan dans le forum C
    Réponses: 5
    Dernier message: 26/11/2008, 14h32
  4. Allocation dynamique: Tableau de pointeur sur char
    Par Anonymouse dans le forum Débuter
    Réponses: 4
    Dernier message: 21/10/2007, 10h57
  5. [DEBUTANT] Tableau et pointeur
    Par Nicolascrepe dans le forum C
    Réponses: 9
    Dernier message: 19/03/2007, 14h03

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