initialisation du tableau de chaînes
Question
Ceci est la suite d'une autre question je.
Considérez le code suivant:
char *hi = "hello";
char *array1[3] =
{
hi,
"world",
"there."
};
Il ne compile pas à ma grande surprise (apparemment, je ne sais pas la syntaxe C, ainsi que je pensais) et génère l'erreur suivante:
error: initializer element is not constant
Si je change le char * en char [] il compile bien:
char hi[] = "hello";
char *array1[3] =
{
hi,
"world",
"there."
};
Quelqu'un peut-il me expliquer pourquoi?
La solution
Dans le premier exemple (char *hi = "hello";
), vous créez un pointeur non const qui est initialisé à un point à la chaîne de const statique « bonjour ». Ce pointeur pourrait, en théorie, point tout ce que vous aimez.
Dans le second exemple (char hi[] = "hello";
) vous définissez spécifiquement un tableau, pas un pointeur, de sorte que l'adresse à laquelle il fait référence est non modifiable. Notez qu'un tableau peut être considéré comme un pointeur non modifiable à un bloc de mémoire spécifique.
Votre premier exemple compile en fait sans problème en C ++ (mon compilateur, au moins).