Est-ce à partir de la norme C?Que signifie "char (* a) [12]"?
Répondre
Du fait des déclarations en C suivent les règles de priorité de l'opérateur (par exemple abonnement tableau est évalué avant indirection), vous aurez besoin de parens pour déclarer des pointeurs sur les types de tableaux. Dans de nombreux cas d'utilisation
, il n'y a pas vraiment un avantage pratique sur l'utilisation d'une char *
ordinaire, sauf qu'il est un moyen de faire respecter la taille du tableau, en particulier lorsqu'il est utilisé comme paramètre de fonction:
void foo(char bar[42]);
est équivalent à
void foo(char *bar);
et accepte toute char *
, alors que
void foo(char (*bar)[42]);
n'accepte que les pointeurs vers des tableaux de taille 42
.
Comme l'accès aux éléments de bar
dans ce dernier cas est lourd, il pourrait être une bonne idée de définir immédiatement un char *
équivalent dans le corps de la fonction
char *baz = *bar;
afin que vous puissiez utiliser souscription directe baz[13]
au lieu de (*bar)[13]
.
Un pointeur vers un tableau de 12 caractères.
'char' signifie octet, pas caractère. – dan04
@dan, si vous allez être pédant, vous devriez aussi avoir raison. "Un objet déclaré comme type char est assez grand pour stocker n'importe quel membre du jeu de caractères d'exécution de base." (§6.2.5 de C99) Un 'char' ne peut pas contenir (par exemple) un caractère Unicode arbitraire, mais il peut contenir les caractères de base tels que définis par C. –
@ dan04: Considérant que' char' convertit automatiquement sa valeur dans le caractère correspondant Caractère ASCII, je suis assez sûr que cela qualifie comme un personnage au moins dans un certain sens. – Maulrus
a
est un pointeur pointant vers array of 12 characters
.
'a' n'est pas un pointeur de caractère. –
@didier alors quel genre de pointeur est-il ... si je me trompe – Vijay
C'est un ** pointeur **. Vous pourriez dire un pointeur * array *, mais il est inutile d'ajouter un adjectif au pointeur lorsque vous ajoutez * pointant vers * après. Écrire * le pointeur de caractère * est trompeur. –
Si vous êtes confus par une déclaration de C, vous pouvez utiliser le programme cdecl
pour l'expliquer:
~$ cdecl
Type `help' or `?' for help
cdecl> explain char (*a)[12];
declare a as pointer to array 12 of char
cool, je ne le savais pas! (J'ai mon cahier avec une petite liste de decls étranges que j'ai tendance à oublier) +1 – ShinTakezou
Je ne connaissais pas celui-ci, merci! – Dpp
Pointeur vers un tableau de caractères Je pense ... – mpen