Wyrażenia wartości L i R
Wyrażenia, które odwołują się do lokalizacji pamięci są nazywane wyrażeniami „l-wartości”. Wartość l reprezentuje wartość "lokalizatora" regionu magazynu lub wartość "lewą", co oznacza, że może pojawić się po lewej stronie znaku równości (=
). L-wartości są często identyfikatorami.
Wyrażenia odwołujące się do modyfikowalnych lokalizacji są nazywane "modyfikowalnymi wartościami l". Modyfikowalna wartość l nie może mieć typu tablicy, niekompletnego typu ani typu z atrybutem const
. Aby struktury i związki mogły być modyfikowalne wartości l, nie mogą mieć żadnych elementów członkowskich z atrybutem const
. Nazwa identyfikatora oznacza lokalizację pamięci, podczas gdy wartość zmiennej jest wartością przechowywaną w tej lokalizacji.
Identyfikator jest l-wartością, którą można modyfikować, jeśli dotyczy lokalizacji w pamięci i jeśli jego typem jest typ arytmetyczny, struktura, unia lub wskaźnik. Na przykład, jeśli ptr
jest wskaźnikiem do regionu pamięci, *ptr
jest modyfikowalną l-wartością, która określa region pamięci wskazywany przez ptr
.
Każde z następujących wyrażeń C może być wyrażeniem l-wartości:
Identyfikator typu całkowitego, zmiennoprzecinkowego, wskaźnika, struktury lub unii
Wyrażenie indeksu dolnego (
[ ]
), które nie daje wartości tablicyWyrażenie wyboru elementu członkowskiego (
->
lub.
)Wyrażenie jednoargumentowe (
*
) nie odwołujące się do tablicyWyrażenie l-wartości w nawiasach
const
Obiekt (niemodyfikowalna wartość l))
„R-wartość” jest czasami używana do opisywania wartości wyrażenia i odróżniania jej od l-wartości. Wszystkie l-wartości są r-wartościami, ale nie wszystkie r-wartości są l-wartościami.
Specyficzne dla firmy Microsoft
Microsoft C zawiera rozszerzenie standardu ANSI C, które umożliwia rzutowanie wartości l do użycia jako wartości l, o ile rozmiar obiektu nie jest wydłużany przez rzutowanie. (Aby uzyskać więcej informacji, zobacz Konwersje rzutów typu). Poniższy przykład ilustruje tę funkcję:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
Ustawieniem domyślnym dla firmy Microsoft C jest to, że rozszerzenia firmy Microsoft są włączone. Użyj opcji /Za kompilatora, aby wyłączyć te rozszerzenia.
END Microsoft Specific