Notation C: pointeur vers tableau de caractères (string)
Pourquoi sont des pointeurs vers des tableaux de char
s (ie. string
s) écrit comme ci-dessous:
char *path
Au lieu de:
char *path[]
ou quelque chose comme ça?
Comment pourrais-je créer un pointeur vers un char
et pas un string
?
Quel livre êtes-vous à l'apprentissage de la C?
char *path[] est un pointeur vers un pointeur vers char. C'est le même char **chemin d'accès. char chemin[] ou char *chemin d'accès sont à la fois des pointeurs de char.
Le seul contexte où
Un pointeur de tableau de caractères serait un
char *path[] est un pointeur vers un pointeur vers char. C'est le même char **chemin d'accès. char chemin[] ou char *chemin d'accès sont à la fois des pointeurs de char.
Le seul contexte où
char *path[]
est le même que char **path
est dans une fonction de la liste des paramètres.char *path[]
est un tableau de pointeurs. Dans de nombreux contextes path
permettra d'évaluer à un char**
, mais il est encore en fait un tableau, pas un pointeur. Par exemple, on ne pouvait pas dire path = &some_char_pointer;
comme si path
ont été déclarées comme un char**
.Un pointeur de tableau de caractères serait un
char (*ptr)[length];
. À peine de l'utiliser pour que, depuis le tableau les adresses ne sont pas mutables.OriginalL'auteur thom | 2011-05-17
Vous devez vous connecter pour publier un commentaire.
char *path
n'est pas un pointeur vers une chaîne de caractères, il est un pointeur vers unechar
.Il peut être le cas que
char *path
de la sémantique des points à une "chaîne", mais c'est juste dans l'interprétation des données.En c, les chaînes utilisent souvent
char *
, mais seulement sous l'hypothèse que le pointeur vers le premier caractère de la chaîne, et les autres personnages sont la suite dans la mémoire jusqu'à ce que vous atteignez un terminateur null. Cela ne change pas le fait que c'est juste un pointeur vers un caractère.OriginalL'auteur Gavin H
char *path
est un pointeur vers char. Il peut être utilisé pour pointer sur un seul char ainsi que de pointer sur un char à zéro terminée par le tableau (une chaîne)char *path[]
est un tableau de pointeurs sur char.Un pointeur vers un tableau de char serait
char (*path)[N]
où N (la taille du tableau) est la partie du pointeur de type. Ces pointeurs ne sont pas largement utilisés en raison de la taille de la matrice doivent être connus au moment de la compilation.OriginalL'auteur Cubbi
char *path[]
est un tableau de pointeurs.char *path
est un seul pointeur.Une "chaîne" C est simplement un pointeur vers un
char
qui a la convention de l'être le début d'une séquence de caractères qui se termine par '\0'. Vous pouvez déclarer un pointeur vers un seulchar
de la même façon, vous avez juste à prendre soin de l'utiliser selon les données qu'il est réellement pointe.Ceci est similaire à la notion qu'un
char
en C est juste un entier avec un nombre assez limité. Vous pouvez utiliser ce type de données comme un nombre, une valeur vrai/faux, ou comme un personnage qui doit être affiché comme un glyphe à un certain point. L'interprétation de ce qui est dans lechar
variable est au programmeur.N'ayant pas de première classe, à part entière "chaîne" type de données est quelque chose qui distingue C de la plupart des autres haut niveau de langues. Je vous laisse décider par vous-même si elle distingue C dans une bonne ou une mauvaise façon.
char (*ptr)[]
? Je n'arrive pas à penser à une situation où ce serait utile, en particulier par rapport à unchar *ptr[]
OriginalL'auteur Michael Burr