inizializzazione dell'array di stringhe
Domanda
Questa è la continuazione di un'altra domanda che ho.
Considera il codice seguente:
char *hi = "hello";
char *array1[3] =
{
hi,
"world",
"there."
};
Non si compila con mia sorpresa (apparentemente non conosco la sintassi C così come pensavo) e genera il seguente errore:
error: initializer element is not constant
Se cambio il char * in char [] si compila bene:
char hi[] = "hello";
char *array1[3] =
{
hi,
"world",
"there."
};
Qualcuno può spiegarmi perché?
Soluzione
Nel primo esempio (char *hi = "hello";
), stai creando un puntatore non const che viene inizializzato per puntare alla stringa const statica "ciao".Questo puntatore potrebbe, in teoria, puntare a qualsiasi cosa tu voglia.
Nel secondo esempio (char hi[] = "hello";
) stai specificatamente definendo un array, non un puntatore, quindi l'indirizzo a cui fa riferimento non è modificabile.Nota che un array può essere pensato come un puntatore non modificabile a uno specifico blocco di memoria.
Il tuo primo esempio viene effettivamente compilato senza problemi in C ++ (il mio compilatore, almeno).