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 :

Pointeur, tableau et chaines de caractères.


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Points : 65
    Points
    65
    Par défaut Pointeur, tableau et chaines de caractères.
    Bonjour,

    J'ai un petit problème de compréhension sur les pointeurs.

    J'ai fait un premier programme avec un pointeur sur un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main()
    {
    	int tableau[]={ 0,1,2,3,4,5};
    	int *p=tableau;
     
    	cout << p << endl;
    	cout << *p << endl;	
    	return 0;
    }
    Dans ce cas, je vais afficher l'adresse pointée ( qui est en fait l'adresse de tableau[0] ) et le contenu de cette adresse ( *p), c'est à dire tableau[0].

    J'ai fait ensuite un autre programme avec un pointeur sur chaine de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main()
    {
    	char chaine[]="maison";
    	char *p=chaine;
     
     
    	cout << p << endl;
    	cout << *p << endl;
     
    	return 0;
    }
    Dans ce cas la, *p va m'afficher le contenu de chaine[0], c'est à dire m, par contre, p va m'afficher 'maison'.

    Ma question est la suivante : je ne comprends pas ici pourquoi p n'affiche pas l'adresse de chaine[0] ?

    Merci d'avance,

    Julien

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    En fonction du type des opérandes, ce n'est pas le même operateur de flot (<<) qui est appelé.
    Si tu souhaites obtenir l'adresse de la chaine de caractères, tu peux toujours transtyper le pointeur.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Points : 65
    Points
    65
    Par défaut
    ah ok, merci.

    Mais rassure moi, le pointeur p pointe bien sur l'adresse de chaine[0] ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Citation Envoyé par rouliane
    ah ok, merci.
    Mais rassure moi, le pointeur p pointe bien sur l'adresse de chaine[0] ?
    Sois rassuré

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 632
    Points : 30 711
    Points
    30 711
    Par défaut
    Salut,

    Ceci dit, et bien que j'aie conscience d'être lourd avec ca, pourquoi ne pas utiliser les capacité de la STL plutot que de s'enquiquiner avec des synthaxes "C Style"

    Un petit exemple vite fait:
    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
     
    // on va utiliser vector pour les tableau et string pour les chaines...
    // il faut donc inclure les deux fichiers, 
    //en plus de iostream (pour les sorties standard)
    #include <iostream>
    #include <string>
    #include <vector>
    int main()
    {
        //j'ai pris l'habitude d'éviter partout le "using namespace"
        //on déclare directement un tableau de chaines 
        std::vector<std::string> montab;
        //on insere différentes chaines
        montab.push_back("mapremierechaine");
        montab.push_back("ma deuxième chaine");
        montab.push_back("mon_nom_de_fichier");
        montab.push_back("deuxieme_nom_de_fichier");
        //quelques affichages
        std::cout<<montab[0]<<"\n"<<montab[3]<<std::endl;
        //si on inclus aussi <fstream> pour pouvoir gérer les fichiers,
        // on peut meme les gérer facilement ;)
        std::ifstream ifs(montab[2].c_str());
        //et le fichier est ouvert :D (bon, c'est quand meme à gérer
        //idéalement dans un bloc try...catch, des fois que le fichier
        //n'existe pas ;)
    }

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Je ms suis posé une question similaire (j'ai posté ça sur le forum relatif au langage C vu que généralement en C++ on utilise la classe string) :

    http://www.developpez.net/forums/sho...d.php?t=249655

    Si ça peut t'être utile ...

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        std::ifstream ifs(montab[2].c_str());
        //et le fichier est ouvert :D (bon, c'est quand meme à gérer
        //idéalement dans un bloc try...catch, des fois que le fichier
        //n'existe pas ;)
    Pas besoin de bloc try/catch si tu n'as pas quelque chose à faire en particulier pour gérer l'erreur.

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 632
    Points : 30 711
    Points
    30 711
    Par défaut
    Citation Envoyé par loufoque
    Pas besoin de bloc try/catch si tu n'as pas quelque chose à faire en particulier pour gérer l'erreur.
    Non, c'est clair, mais je voulais surtout attirer l'attention sur le fait qu'il est généralement intéressant de prévoir une gestion d'erreur lors des tentatives d'acces aux fichiers...

    Tout comme il est intéressant de prévoir la gestion d'erreur pour tout "appel systeme", quel qu'il soit...

    Et ce, meme si la plupart des fois, c'est plus pour faciliter la recherche et la mise au point de solution de la part du concepteur

  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
    Non, c'est clair, mais je voulais surtout attirer l'attention sur le fait qu'il est généralement intéressant de prévoir une gestion d'erreur lors des tentatives d'acces aux fichiers...
    Il semblerait que tu aies mal compris les exceptions.
    On ne prévoit pas une gestion d'erreur, on gère l'erreur uniquement si on a quelque chose de pertinent à faire qui n'est pas déjà fait dans des contextes supérieurs.

    Tout comme il est intéressant de prévoir la gestion d'erreur pour tout "appel systeme", quel qu'il soit...
    Les appels systèmes fonctionnent avec des valeurs de retour. Tu es obligé de vérifier la valeur de retour, sinon tu ne remarques même pas qu'il y a une erreur et tu invoques du comportement indéfini. Et tu dois bien sûr manuellement véhiculer cette erreur aux contextes supérieurs.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2014, 01h44
  2. Réponses: 10
    Dernier message: 31/05/2007, 16h10
  3. tableau de chaine de caractères
    Par psgman113 dans le forum C
    Réponses: 15
    Dernier message: 22/01/2007, 19h52
  4. Réponses: 15
    Dernier message: 04/11/2006, 11h02
  5. [C] tableau de chaines de caractères
    Par kitsune dans le forum C
    Réponses: 18
    Dernier message: 01/04/2006, 19h18

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