Les pointeur sur char
Fermé
SlimJ
-
17 août 2015 à 01:35
jackdada Messages postés 77 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 10 février 2016 - 18 août 2015 à 13:02
jackdada Messages postés 77 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 10 février 2016 - 18 août 2015 à 13:02
A voir également:
- Les pointeur sur char
- Coco char - Accueil - Réseaux sociaux
- Pointeur souris disparu windows 10 - Guide
- Pointeur souris - Guide
- Pointeur souris disparu pc portable asus - Guide
- Problème pointeur souris excel ✓ - Forum Excel
1 réponse
jackdada
Messages postés
77
Date d'inscription
vendredi 31 juillet 2015
Statut
Membre
Dernière intervention
10 février 2016
19
17 août 2015 à 06:22
17 août 2015 à 06:22
Bonjour,
Les chaine de caractère sont en réalité des tableau de char.
avec ça tu réserve en mémoire l'espace nécessaire pour stocker bonjour.
Tu aurais très bien pu déclarer ta chaine des manière suivante:
ou
Concernant le concret de ta question qui porte sur la partie pointeur, ceci est dut au fait qu'une chaine de caractère n'est pas une simple variable mais un tableau et en a les même propriété de base. Donc quand tu demande l'affichage de ta chaine, ch donne en faite l'adresse de l'élément ch[0]. Tu obtient en retour ta chaine et non l'adresse car tu demande par le paramètre %s l'affichage d'une chaine, donc à partir de l'adresse du première élément de ton tableau (contenu dans ch), tu demande enfaite l'affichage de chaque élément (ch[0], ch[1]...) jusque la rencontre du caractère '\0'.
Tu t'est jamais posé la question de pourquoi quand je passe un tableau dans une fonction, je ne passe pas simplement une copie de ce dernier comme avec une variable et donc tout changement effectué sur ce tableau sont conservé en sortit de fonction. Ceci est du au fait que le simple nom de ton tableau contient en faite son adresse.
Les chaine de caractère sont en réalité des tableau de char.
char *ch="bonjour";
avec ça tu réserve en mémoire l'espace nécessaire pour stocker bonjour.
Tu aurais très bien pu déclarer ta chaine des manière suivante:
char ch[8];
ch[0]='b';
ch[1]='o';
ch[2]='n';
ch[3]='j';
ch[4]='o';
ch[5]='u';
ch[6]='r';
ch[7]='\0';
ou
char ch[]="bonjour";
Concernant le concret de ta question qui porte sur la partie pointeur, ceci est dut au fait qu'une chaine de caractère n'est pas une simple variable mais un tableau et en a les même propriété de base. Donc quand tu demande l'affichage de ta chaine, ch donne en faite l'adresse de l'élément ch[0]. Tu obtient en retour ta chaine et non l'adresse car tu demande par le paramètre %s l'affichage d'une chaine, donc à partir de l'adresse du première élément de ton tableau (contenu dans ch), tu demande enfaite l'affichage de chaque élément (ch[0], ch[1]...) jusque la rencontre du caractère '\0'.
Tu t'est jamais posé la question de pourquoi quand je passe un tableau dans une fonction, je ne passe pas simplement une copie de ce dernier comme avec une variable et donc tout changement effectué sur ce tableau sont conservé en sortit de fonction. Ceci est du au fait que le simple nom de ton tableau contient en faite son adresse.
17 août 2015 à 21:18
Les chaine de caractère sont en réalité des tableau de char.
Non, un tableau n'est pas un pointeur.
char ch[]="bonjour"; et char *ch="bonjour"; sont bel et bien différents, même s'ils se comportent de façon similaire dans la plupart des cas.
Ceci est du au fait que le simple nom de ton tableau contient en faite son adresse.
Plutôt que dans un contexte de fonction, le compilateur transforme le tableau en adresse sur le 1er élément.
18 août 2015 à 02:44
Je n'est aucunement dit qu'un tableau était un pointeur...
Par contre je suis intéressé à connaitre la différence entre char ch[]="bonjour"; et char *ch="bonjour"; Sachant qu'il fournisse un résultat similaire qu'est ce qui les différencie? Il y a une différence dans la compilation de ces deux ligne de code? si oui qu'est ce qui s'y passe?
18 août 2015 à 12:18
Création d'un tableau de 8 caractères dans la stack et initialisation à 'b', 'o', ..., '\0';
char *ch="bonjour";
Création d'un pointeur dans la stack avec initialisation de sa valeur qui contient une adresse mémoire vers une zone en lecture seule présente dans le heap.
18 août 2015 à 13:02