Pregunta

Esta es una continuación de otra pregunta que tengo.

Considere el siguiente código:

char *hi = "hello";

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

Para mi sorpresa, no se compila (aparentemente no conozco la sintaxis de C tan bien como pensaba) y genera el siguiente error:

  error: initializer element is not constant

Si cambio el char * a char [], se compila bien:

char hi[] = "hello";

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

¿Alguien puede explicarme por qué?

¿Fue útil?

Solución

En el primer ejemplo (char *hi = "hello";), está creando un puntero no constante que se inicializa para apuntar a la cadena constante estática "hello".Este puntero podría, en teoría, apuntar a cualquier cosa que desee.

En el segundo ejemplo (char hi[] = "hello";) está definiendo específicamente una matriz, no un puntero, por lo que la dirección a la que hace referencia no se puede modificar.Tenga en cuenta que una matriz puede considerarse como un puntero no modificable a un bloque de memoria específico.

Su primer ejemplo se compila sin problemas en C ++ (mi compilador, al menos).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top