Et moi qui croyais que t'avais compris, c'est pas grave.
nom est une adresse (donc une constante !!!)
Mais non, nom est un tableau. Un tableau de 100 char.
Ce code est un raccourci syntaxique qui initialise le tableau
Non, le raccourci syntaxique est :
char nom[100] = "Dupond";
mais "nom" reste toujours une adresse (nom == &nom[0])
nom n'est pas &nom[0], mais est dans certains cas automatiquement converti en &nom[0]. Et ces certains cas sont discutés dans le tutoriel que je t'ai indiqué. Pour t'en convaincre, affiche sizeof(nom) et sizeof(&nom[0]) et tu verras que ce sont à priori deux choses qui n'ont rien à voir. Les réponses aux questions que tu pourras te poser après sont, encore une fois, déjà dans le tutoriel.
alors pourquoi il peut pas stocké "Dupond" en mémoire comme un pointeur
D'abord, on ne stocke pas une adresse (&nom[0] par exemple est une adresse) dans une adresse, mais dans un pointeur. Preuve simple : tu ne peux par exemple pas écrire :
1 2
| char c; /* c est un char, &c est donc une adresse */
&c = "Dupond"; |
Tu veux changer l'adresse de c ? Tu comprends maintenant ? Il y a la notion de lvalue et de rvalue que tu dois aussi comprendre, j'espère que tu sais où regarder .
Ensuite, un pointeur ne stocke pas non plus une chaîne, une chaîne ne peut être stockée que dans un tableau. Un pointeur permet juste de mémoriser l'adresse du premier caractère de la chaîne, c'est-à-dire, numériquement, l'adresse de la chaîne.
Partager