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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top