Espressioni di che Sia e l-value
Le espressioni che fanno riferimento alle posizioni di memoria vengono chiamate espressioni “l-value„.Un l-value rappresenta un valore “localizzatore„ dell'area di archiviazione, o “left„ il valore, implicante che potrebbero comparire a sinistra del segno di uguale (=).i valori l-value solo sono spesso identificatori.
Le espressioni che fanno riferimento alle posizioni modificabili sono definite “valori l-value solo modificabili.„ Un l-value modificabile non può avere un tipo di matrice, un tipo incompleto, o con const attributo.Per le strutture e unioni sono valori l-value solo modificabili, non devono contenere alcuni membri con const attributo.Il nome dell'identificatore indica un percorso di archiviazione, mentre il valore della variabile è il valore archiviato in tale posizione.
Un identificatore è un l-value modificabile se fa riferimento a una posizione di memoria e se il tipo è aritmetico, struttura, unione, o puntatore.Ad esempio, se ptr è un puntatore a un'area di archiviazione, quindi *ptr è un l-value modificabile che definisce l'area di archiviazione a cui ptr punti.
Uno dei seguenti espressioni di C possono essere espressioni l-value:
Un identificatore dell'integrale, di mobile, puntatore, una struttura, o il tipo di unione
Un indice ([]) espressione che non restituisce una matrice
Un'espressione di selezione dei membri (- > o .)
un unario-riferimento indiretto (*) espressione che non fa riferimento a una matrice
Un'espressione l-value tra parentesi
In const oggetto (un l-value non modificabile)
Il termine “r-value„ talvolta viene utilizzato per descrivere il valore di un'espressione e per distinguerlo da un l-value.Tutti i valori l-value solo sono r-valori ma non tutti i r-valori sono valori l-value solo.
Specifici di Microsoft
Microsoft C include un'estensione allo standard ANSI C che consente i cast dei valori l-value solo da utilizzare come valori l-value solo, purché la dimensione dell'oggetto non viene allungata tramite il cast.(Vedere Conversioni di cast di tipo per ulteriori informazioni.) Nell'esempio seguente viene illustrata questa funzionalità:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
L'impostazione predefinita per Microsoft C# è che le estensioni Microsoft sono abilitate.Utilizzare l'opzione del compilatore /Za per disabilitare le estensioni.
Microsoft FINALE specifico