Pergunta

Esta é uma continuação de outra pergunta que eu tenho.

Considere o seguinte código:

char *hi = "hello";

char *array1[3] = 
{
    hi,
    "world",
    "there."
};

Para minha surpresa, não compila (aparentemente não conheço a sintaxe C tão bem quanto pensava) e gera o seguinte erro:

  error: initializer element is not constant

Se eu mudar o char * para char [], ele compila perfeitamente:

char hi[] = "hello";

char *array1[3] = 
{
    hi,
    "world",
    "there."
};

Alguém pode me explicar por quê?

Foi útil?

Solução

No primeiro exemplo (char *hi = "hello";), você está criando um ponteiro não const que é inicializado para apontar para a string const estática "hello".Este ponteiro pode, em teoria, apontar para qualquer coisa que você quiser.

No segundo exemplo (char hi[] = "hello";), você está definindo especificamente um array, não um ponteiro, portanto, o endereço ao qual ele faz referência não pode ser modificado.Observe que uma matriz pode ser considerada um ponteiro não modificável para um bloco específico de memória.

Seu primeiro exemplo realmente compila sem problemas em C ++ (meu compilador, pelo menos).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top