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 :

différence entre char **argv et char *argv[]


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 13
    Points : 19
    Points
    19
    Par défaut différence entre char **argv et char *argv[]
    Bonjour,

    quelle est la différence entre ces trois notations ?

    1.char **argv
    2.char *argv[]
    3.char* argv[]


    Merci pour vos explications :-)

    cdt

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Aucune

    Mais char argv[]; déclare un pointeur, char argv[] = {'a', 'r', 'r', 'a', 'y'}; défini un tableau (argv est un pointeur sur la 1ière case du tableau )

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par BoxOfTheNight Voir le message
    quelle est la différence entre ces trois notations ?

    1.char **argv
    2.char *argv[]
    3.char* argv[]
    Il n'y a aucune différence entre la 2. et la 3. Seule varie la position de l'espace séparateur, qui n'a aucune signification lexicale. Cependant, on préférera quand même la 2. car l'étoile s'applique à l'identificateur qui la suit immédiatement. Par exemple « char* a,b; » sera en fait équivalent à « char *a, b », soit un pointeur et un caractère.

    En revanche, la première définit « un pointeur vers un pointeur vers un char », le premier pointeur pouvant éventuellement pointer en fait une liste de pointeurs consécutifs en mémoire. Les deux autres, en revanche, définissent un tableau de pointeurs. Ça signifie que tu ne pourras pas écrire simplement « char * argv[] » : il faudra soit indiquer la taille de ce tableau entre les crochets, soit l'initialiser à la déclaration avec « = { …, …, … }; », ce bloc donnant implicitement la taille du tableau, soit les deux à la fois.

    Il est important de remarquer que lorsque tu déclares un tableau, tu ne réserves que la place nécessaire à ses éléments. Le nom du tableau (son identifiant) est alors une expression de type pointeur dont la valeur est l'adresse du tableau en mémoire et c'est ce qui te permet de l'indexer avec les crochets « [ ] » pour accéder à ses éléments, mais il ne s'agit pas d'une variable propre, que tu pourrais faire pointer ailleurs. Comme le tableau est connu à la compilation, tu n'en as pas besoin : le compilateur est capable de savoir directement où chercher lorsque tu l'invoques au sein d'une fonction où il est visible.

    Par contre, un tableau n'est pas en soi un type de données et il n'est pas possible de recopier directement un tableau dans un autre à l'aide de « = ». Ça veut dire que si tu passes un tel tableau en tant que paramètre d'une fonction, comme le tableau en question ne sera pas directement visible par la fonction et ne sera pas connu à la compilation, alors il faudra passer l'adresse de ce tableau à ta fonction au runtime. Dès lors, uniquement dans le cas des paramètres de fonction, tes expressions 2. et 3. seront équivalentes à la 1. et ton paramètre sera une authentique variable pointeur.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 13
    Points : 19
    Points
    19
    Par défaut
    Excellent! Merci pour ces explications !!! vraiment top ! merci mille fois

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/01/2014, 00h04
  2. différence entre char a[20]="str" et char *a="str"
    Par iBen68 dans le forum Débuter
    Réponses: 4
    Dernier message: 31/10/2009, 03h22
  3. différence entre int et char
    Par hassiba_45 dans le forum C++
    Réponses: 4
    Dernier message: 12/06/2008, 21h53
  4. [Free Pascal] Mini-tutoriel : Différence entre char et chr (auto-analyse de code)
    Par Clandestino dans le forum Free Pascal
    Réponses: 14
    Dernier message: 24/03/2007, 18h18

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