Espressioni L-Value e R-ValueL-Value and R-Value Expressions

Le espressioni che fanno riferimento alle posizioni di memoria vengono chiamate "espressioni l-value".Expressions that refer to memory locations are called "l-value" expressions. Con L-value si intende un valore del "localizzatore" dell'area di archiviazione o un valore "a sinistra", vale a dire che può essere visualizzato a sinistra del segno di uguale (=).An l-value represents a storage region's "locator" value, or a "left" value, implying that it can appear on the left of the equal sign (=). Le espressioni L-value sono spesso identificatori.L-values are often identifiers.

Le espressioni che fanno riferimento alle posizioni modificabili vengono definite "l-value modificabili".Expressions referring to modifiable locations are called "modifiable l-values." Un'espressione L-value modificabile non può avere un tipo matrice, un tipo incompleto o un tipo con l'attributo const.A modifiable l-value cannot have an array type, an incomplete type, or a type with the const attribute. Affinché le strutture e le unioni siano espressioni L-value modificabili, è necessario che non abbiano membri con l'attributo const.For structures and unions to be modifiable l-values, they must not have any members with the const attribute. Il nome dell'identificatore indica un percorso di archiviazione, mentre il valore della variabile è il valore archiviato in quella posizione.The name of the identifier denotes a storage location, while the value of the variable is the value stored at that location.

Un identificatore è un'espressione l-value modificabile se fa riferimento a una posizione di memoria e se il relativo tipo è aritmetico, struttura, unione o puntatore.An identifier is a modifiable l-value if it refers to a memory location and if its type is arithmetic, structure, union, or pointer. Ad esempio, se ptr è un puntatore a un'area di archiviazione, *ptr sarà un'espressione l-value modificabile che definisce l'area di archiviazione a cui punta ptr.For example, if ptr is a pointer to a storage region, then *ptr is a modifiable l-value that designates the storage region to which ptr points.

Una qualsiasi delle seguenti espressioni del linguaggio C può essere un'espressione l-value:Any of the following C expressions can be l-value expressions:

  • Un identificatore di tipo integrale, a virgola mobile, puntatore, struttura o tipo di unioneAn identifier of integral, floating, pointer, structure, or union type

  • Un'espressione di indice ([ ]) che non restituisce una matriceA subscript ([ ]) expression that does not evaluate to an array

  • Un'espressione di selezione dei membri (-> o .)A member-selection expression (-> or .)

  • Un'espressione unaria di riferimento indiretto (\) che non si riferisce a una matriceA unary-indirection (****) expression that does not refer to an array

  • Un'espressione l-value tra parentesiAn l-value expression in parentheses

  • Un oggetto const (un'espressione L-value non modificabile)A const object (a nonmodifiable l-value)

    Il termine "r-value" talvolta viene utilizzato per descrivere il valore di un'espressione e per distinguerlo da l-value.The term "r-value" is sometimes used to describe the value of an expression and to distinguish it from an l-value. Tutti le espressioni l-value sono r-value ma non tutti le espressioni r-value sono I-value.All l-values are r-values but not all r-values are l-values.

    Sezione specifica MicrosoftMicrosoft Specific

    Microsoft C include un'estensione allo standard ANSI C che consente di eseguire il cast delle espressioni l-value da utilizzare come l-value, purché la dimensione dell'oggetto venga non allungata tramite il cast.Microsoft C includes an extension to the ANSI C standard that allows casts of l-values to be used as l-values, as long as the size of the object is not lengthened through the cast. Per altre informazioni, vedere Conversioni di cast di tipo. Nell'esempio seguente viene illustrata questa funzionalità:(See Type-Cast Conversions for more information.) The following example illustrates this feature:

char *p ;  
short  i;  
long l;  

(long *) p = &l ;       /* Legal cast   */  
(long) i = l ;          /* Illegal cast */  

Per impostazione predefinita, in Microsoft C le estensioni Microsoft sono abilitate.The default for Microsoft C is that the Microsoft extensions are enabled. Utilizzare l'opzione del compilatore /Za per disabilitare queste estensioni.Use the /Za compiler option to disable these extensions.

Fine sezione specifica MicrosoftEND Microsoft Specific

Vedere ancheSee Also

Operandi ed espressioniOperands and Expressions