Sdílet prostřednictvím


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 pole

  • Výraz výběru člena (-> nebo .)

  • Unární nepřímý výraz (*), který neodkazuje na pole

  • Vý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

Viz také

Operandy a výrazy