la L davanti a buona sera significa che la stringa seguente è una stringa estesa, un po' come quando scrivi
long i = 33L;
la L in fondo serve a dire che 33 è una costante letterale di tipo long, nello stesso modo una L davanti ad una costante letterale di tipo 'char' o di tipo 'stringa di char' indica al compilatore di riservare spazio in memoria non già per un char di 8 bit, ma per un char di una altra misura, diciamo 16 bit.
Esempio:
char * stringa = "Buona sera!";
il compilatore assegna un'area di memoria che contiene un puntatore e un area che contiene la stringa, inoltre fa si che il puntatore punti a quest'area.
supponi che stringa sia allocata all'indirizzo 20 e "Buona sera!" all'indirizzo 50, supponiamo anche di parlare di architettura simile alla Intel a 32 bit, i principi valgono poi per quasiasi piattaforma, supponi inoltre (come è al 99% dei casi) che il compilatore tratti i wchar_t come caratteri UNICODE, ovvero il carattere 'A', ascii 0x41, viene memorizzato come carattere a 16 bit, ovvero 0x0041.
Ora chiedimi: perchè usare caratteri a 16 bit, che quelli a 8 sono così comodi?codice:INDIRIZZI DATI (8 bit) +----------+----- 20 | 50 > 21 | 0 > indirizzo della stringa 22 | 0 > 23 | 0 > ..... 50 | 'b' 51 | '\0' 52 | 'u' 53 | '\0' 54 | 'o' 55 | '\0' .... Se invece non mettevi la L davanti INDIRIZZI DATI (8 bit) +----------+----- 20 | 50 > 21 | 0 > indirizzo della stringa 22 | 0 > 23 | 0 > ..... 50 | 'b' 51 | 'u' 52 | 'o' 53 | 'n' 54 | 'a' 55 | ' ' ....
Siccome in molti sistemi operativi, tra cui windows 2000, tutte le stringhe sono a 16 bit, le prestazioni generali delle applicazioni sono migliori il sistema non deve convertirle).
Inoltre puoi scrivere programmi da vendere in Cina, grazie al fatto che UNICODE è in grado di gestire l'alfabeto cinese.

Rispondi quotando