C: déclarer un pointeur constant vers un tableau de caractères constante
J'essaie de comprendre la matrice de déclarations, constness, et leurs types de variables.
Suivantes est autorisée (par mon compilateur):
char s01[] = "abc" ; //typeof(s01) = char*
const char s02[] = "abc" ; //typeof(s02) = const char* (== char const*)
char const s03[] = "abc" ; //typeof(s03) = char const* (== const char*)
Alternativement, nous pouvons déclarer la taille de la matrice manuellement:
char s04[4] = "abc" ; //typeof(s04) = char*
const char s05[4] = "abc" ; //typeof(s05) = const char* (== char const*)
char const s06[4] = "abc" ; //typeof(s06) = char const* (== const char*)
Comment puis-je obtenir un résultat variable de type const char* const
? Les éléments suivants ne sont pas autorisés (par mon compilateur):
const char s07 const[] = "abc" ;
char const s08 const[] = "abc" ;
const char s09[] const = "abc" ;
char const s10[] const = "abc" ;
const char s11 const[4] = "abc" ;
char const s12 const[4] = "abc" ;
const char s13[4] const = "abc" ;
char const s14[4] const = "abc" ;
Grâce
Je ne suis pas entièrement sûr que C prend en charge la const ptr* const chose que le C++ n'.
Il n'.
La suite est un outil très utile: cdecl.ridiculousfish.com/... ; cdecl.ridiculousfish.com/...
j'ai demandé à cette question:
Il n'.
La suite est un outil très utile: cdecl.ridiculousfish.com/... ; cdecl.ridiculousfish.com/...
j'ai demandé à cette question:
const char a[const]
OriginalL'auteur kevinarpe | 2010-08-19
Vous devez vous connecter pour publier un commentaire.
char *const s15
signifie que la constante de pointeur de char.char const *s15
signifie pointeur-à-constant-char.char const *const s15
signifie que la constante pointeur-à-constant-char. L'essayer! De droite à gauche!Le droit-à-gauche de la règle ne s'applique pas dans tous les cas, si. par exemple,
int blah[5][2]
. Le meilleur résumé de la façon de lire declarators j'ai jamais trouvé est ici: msdn.microsoft.com/en-us/library/1x82y1z4.aspx.Ce n'est pas de droite à gauche, pas plus qu'il est de gauche à droite, c'est intérieur.
C'est la réponse que je cherchais. J'en étais resté sur l'idée que [] alloue sur la pile (quand déclarées dans une fonction). Si c'est une constante pointeur vers un tableau de caractères constante, je n'ai pas besoin d'allouer sur la pile. Une fois dans le programme de l'espace de données est OK. Qui sait où "abc" est attribuée ici, et qui s'en soucie. Nous utilisons
s15
comme un absolu constant. On ne peut pas réaffecter le pointeurs15
, nous ne pouvons pas modifier la valeur(s) pour lequel il pointe ("abc"
). Merci!Les déclarations en C doit être lu dans le sens des aiguilles d'une spirale: c-faq.com/decl/spiral.anderson.html
OriginalL'auteur rui
Votre premier
typeof
les commentaires ne sont pas vraiment correct. Le type des01
estchar [4]
, et les types des02
ets03
sontconst char [4]
. Lorsque utilisé dans une expression, et non le sujet de la&
ousizeof
opérateurs, ils évalueront à rvalues de typechar *
etconst char *
respectivement, pointant sur le premier élément du tableau.Vous ne pouvez pas déclarer de telle manière à ce qu'ils se désintègrent en une rvalue que lui-même est const-qualifiés; il n'a pas vraiment de sens d'avoir un const qualifiés rvalue, depuis rvalues ne peut pas être attribué. C'est comme de dire que vous voulez un
5
constante qui est de typeconst int
plutôt queint
.OriginalL'auteur caf
s01
et al ne sont pas vraiment des types pointeur, ils sont les types tableau. En ce sens, ils agissent un peu commeconst
pointeurs (vous ne pouvez pas re-assigners01
à quelque part d'autre, par exemple).OriginalL'auteur Oliver Charlesworth
Utilisation cdecl:
Pointeurs de tableaux sont rarement utilisés dans C; généralement les fonctions de l'API s'attendre à un pointeur vers le premier élément.
OriginalL'auteur Gilles