Cosa restituiscono gli inizializzatori di array come { 'a', 'b', 'c' }
? La mia comprensione è che l'uso di un inizializzatore alloca blocchi di memoria contigui e restituisce l'indirizzo al primo blocco.Cosa restituiscono gli inizializzatori di array?
Il seguente codice non funziona:
char *char_ptr_1 = { 'a', 'b', 'c', '\0' };
D'altra parte, questo è sembra funzionare bene:
char char_array[] = { 'a', 'b', 'c', '\0' };
char *char_ptr_2 = char_array;
char_array
memorizza l'indirizzo del primo blocco di memoria che spiega perché Sono in grado di assegnare il valore di char_array
a chat_ptr_2
. C converte il valore restituito dall'inizializzatore in qualcosa che può essere memorizzato in un puntatore?
Ho cercato online e ho trovato un paio di risposte che hanno parlato della differenza tra array e indicatori, ma non mi hanno aiutato.
vuoi letterali Compound in C99. Per esempio. 'char * char_ptr_2 = (char []) {'a', 'b', 'c', '\ 0'};' – BLUEPIXY
Ancora, l'elenco di inizializzazione di un letterale composto segue le stesse regole di qualsiasi altro elenco di inizializzatore. Il composto letterale assegna solo una porzione anonima di dati nello stack. Quindi è la stessa cosa che dichiarare un array e quindi assegnare un puntatore al punto su quell'array. – Lundin
Si potrebbe dire 'char * char_ptr_1 =" abc ";'. Tuttavia, GCC lo segnala come deprecato senza un modificatore 'const'. Presumibilmente perché il compilatore non è obbligato a creare una matrice univoca per ogni occorrenza letterale della stringa. –