inicialización de matriz de cadenas
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é?
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).