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é?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top