Annonce

Réduire
Aucune annonce.

[ARGV] Tableau de pointeurs

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [ARGV] Tableau de pointeurs

    Bonjour à tous,

    Hum, une petite question à propos de l'en-tête suivante :

    Code:
    int main(int argc,char *argv[])
    "argv" est bien un tableau de pointeurs de type "char"

    Comment se fait-il que lorsqu'on écrit "argv[0]" on obtienne le premier

    argument passé au programme alors que, "argv[0]" contiendrait la valeur du premier

    pointeur ? Non ?!

    (Fred', please don't judge me, i'm a beginner )

    EDIT :

    Problème RÉSOLU, "argv[0]" est bien un pointeur de type char, lorsque l'utilisateur

    appel le programme avec des paramètres, ils sont reçues en tant que "chaine de char" -> String

    "argv[0]" stocke l'adresse de la première lettre du premier argument

    "argv[1]" stocke l'adresse du deuxième argument etc..

    Donc ont est tout bon parce-que pour afficher une string on utilise l'adresse du PREMIER élément !
    Dernière modification par shirocen, 12 septembre 2015, 21h58.
    deux et deux font cinq

  • #2
    Oui, en fait c'est un tableau de chaines de caractères (donc un tableau de char*). une chaine de caractères n'étant elle-même qu'un pointeur sur char.
    Quand tu créés une chaine de caractères tu créés en fait un pointeur sur le premier caractère de la chaine, les caractères suivants étant placés de manière contiguë en mémoire.
    un tableau de char* n'est autre qu'un tableau de pointeur sur char
    Qui est le maître, le peintre ou le faussaire... ?

    ㅡ La solidité d'une chaine est égale à la solidité de son maillon le plus faible ㅡ

    Commentaire


    • #3
      char *argv[]
      C'est un tableau d'adresses tout simplement

      On pourrait très bien faire cela

      Code:
      #include <string.h>
      
      int main(void){
      
          char a = 'a';
          char b = 'b';
      
          int i;
      
          char *argv[2];
          argv[0] = &a; /* adresse de a dans la case 0 */
          argv[1] = &b; /* adresse de b dans la case 1 */
      
          for (i=0; i<2; i++)
              printf("%c\n", *(argv[i])); /* déréférencement, récupération de la valeur se trouvant à cette adresse */
      
          return 0;
      }
      ou ça

      Code:
      #include <string.h>
      
      int main(void){
      
          char a[] = "coucou";
          char b[] = "bonjour";
      
          int i;
      
          char *argv[2];
          argv[0] = &(a[0]); /* adresse de a[0] dans la case 1 */
          argv[1] = b; /* équivalent à ci-dessus */
      
          for (i=0; i<2; i++)
              printf("%s\n", argv[i]);
      
          return 0;
      }
      Ça reste un tableau où l'on insère des adresses de type char dans notre cas.
      Dernière modification par fred, 17 septembre 2015, 09h57.

      Commentaire

      Chargement...
      X