Výrazy hodnot L-Value a R-Value
Výrazy, které odkazují na umístění v paměti, se nazývají výrazy „l-hodnota“. L-hodnota představuje hodnotu "lokátoru" oblasti úložiště nebo "levou" hodnotu, což znamená, že se může objevit nalevo od symbolu rovná se (=
). L-hodnoty jsou často identifikátory.
Výrazy odkazující na upravitelná umístění se nazývají "upravitelné l-hodnoty". Upravitelná l-hodnota nemůže mít typ pole, neúplný typ nebo typ s atributem const
. Aby struktury a sjednocení byly upravitelné l-hodnoty, nesmí mít žádné členy s atributem const
. Název identifikátoru označuje umístění úložiště, zatímco hodnota proměnné je hodnota uložená v tomto umístění.
Identifikátor je upravitelná l-hodnota, odkazuje-li na umístění v paměti a je-li její typ aritmetický, struktura, sjednocení nebo ukazatel. Například pokud je ptr
ukazatel na oblast úložiště, pak je *ptr
upravitelná l-hodnota, jež určuje oblast úložiště, na které ptr
ukazuje.
Jakýkoli z těchto výrazů jazyka C může být výrazem l-hodnoty:
Identifikátor celočíselného typu, typu s plovoucí desetinnou čárkou, typu ukazatele, struktury nebo sjednocení
Výraz dolního indexu
[ ]
, který se nevyhodnocuje jako poleVýraz výběru člena (
->
nebo.
)Unární nepřímý výraz (
*
), který neodkazuje na poleVýraz l-hodnoty v závorkách
Objekt
const
(neupravitelná l-hodnota)
Pojem „r-hodnota“ se někdy používá k popisu hodnoty výrazu a pro jeho odlišení od l-hodnoty. Všechny l-hodnoty jsou r-hodnotami, ale ne všechny r-hodnoty jsou l-hodnotami.
Specifické pro Microsoft
Microsoft C obsahuje rozšíření standardu ANSI C, které umožňuje přetypování l-hodnot použít jako l-hodnoty, pokud velikost objektu není prodloužena přes přetypování. (Další informace najdete v tématu Převody přetypování typu.) Následující příklad znázorňuje tuto funkci:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
Výchozí hodnota pro Microsoft C je, že jsou povolená rozšíření Microsoftu. K zakázání těchto rozšíření použijte možnost kompilátoru /Za.
END Microsoft Specific