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 :

probleme avec pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut probleme avec pointeurs
    Bonjour,

    Soit un programme contenant les déclarations suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char *argv[] = {
                        "Wolfgang Amadeus Mozart",
                        "Ludwig van Beethoven",
                        "Hector Berlioz",
                        "Nicolo Paganini"
                      };
       char **p = argv;
    Déterminer la valeur des expressions des 2 séries suivantes :

    série 1 :
    -------

    1) (*p++)[1]
    2) *p++[1]
    3) (*++p)[4]
    4) *++*p

    série 2 :
    -------
    1) (*p++)[1]
    2) *p[1]++
    3) (*++p)[4]
    4) *++*p
    Je n'ai pas compris à quoi sert cette instruction:


    Merci.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par jojo_ol76 Voir le message
    Je n'ai compris à quoi sert cette instruction:

    char **p=argv;
    En fait dans ce cas, tu passes l'adresse du premier élément de argv soit [0][0] au pointeur sur pointeur p !

    Ici, l'affectation est faite pour pouvoir voyager au sein de argv par le biais de ce pointeur p ce qui permet alors d'utiliser l'arithmétique des pointeur. Ce n'est pas la meilleur façon d'utiliser les tableaux ou tableaux de tableaux car ca peut en dérouter plus d'un.

    J'espère que j'ai pu t'aider un peu
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    à quoi correspondent ces instructions?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    *++*p;
    *p++[1];
    (*p++)[1];

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    De mémoire, ça équivaut à ceci:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    *(++(*p));
    *((p++)[1]);
    (*(p++))[1];

    Avec les parenthèses, tu devrais pouvoir les interpréter plus facilement.
    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.

  5. #5
    Membre confirmé Avatar de buse974
    Homme Profil pro
    Développeur / Chef de projet informatique
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur / Chef de projet informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut
    Salut
    Donc la *p = "Wolfgang Amadeus Mozart"
    et le *++ decale le pointeur d'un char ce qui te donne au final

    "olfgang Amadeus Mozart"


    ici si je pose *p[1] c'est équivalent a p[1][0] donc

    le resultat sera le premier caractere de "Ludwig van Beethoven" donc 'L'

    le fait de ++ fera que *p et éguale maintenant a "Ludwig van Beethoven"

    ici si je pose (*p)[1] c'est équivalent a p[0][1] donc

    le resultat sera le caractere [1] de "Wolfgang Amadeus Mozart" donc 'o'

    le fait de ++ fera que *p et éguale maintenant a "Ludwig van Beethoven"


    voila en espérent t'avoir aider.
    @+.

  6. #6
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    En fait dans ce cas, tu passes l'adresse du premier élément de argv soit [0][0] au pointeur sur pointeur p !
    Tu veux surement dire
    et non

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sachant que ces trois expressions, bien qu'elles aient des valeurs égales, ont des types différents:
    • argv : char *[4]
    • &argv : char * (*)[4] (cette écriture est la seule acceptée par le compilateur,
      mais pour un humain, il serait plus intuitif d'écrire
      char *[4] *)
    • &argv[0] : char **

    L'expression &argv[0][0] quant à elle, possède une valeur différente, et de type char *.
    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
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Tu veux surement dire
    et non
    Heu oui
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. probleme avec pointeur et structure
    Par nyergk dans le forum C
    Réponses: 2
    Dernier message: 18/12/2012, 10h53
  2. Probleme avec pointeur const
    Par uriotcea dans le forum C++
    Réponses: 10
    Dernier message: 27/10/2010, 22h19
  3. Réponses: 6
    Dernier message: 26/05/2007, 00h33
  4. probleme avec pointeur et iterateur
    Par tcharles dans le forum C++
    Réponses: 11
    Dernier message: 26/11/2006, 23h59
  5. probleme avec pointeurs de structures
    Par remi77 dans le forum C
    Réponses: 2
    Dernier message: 20/10/2003, 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