Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Konštanta, premenná, pole alebo člen štruktúry môžu byť všetky považované za lhodnoty, pretože spĺňajú túto požiadavku.
Tu je niekoľko príkladov hodnôt lv C:
``` c
int pole[10];
int* pointer_to_array =&array;
int main() {
pole[0] =10; // pole[0] je lvalue
(*pointer_to_array) =10; // *pointer_to_array je tiež lvalue
návrat 0;
}
```
Nie všetky výrazy sú však lvalues. Napríklad volania funkcií a doslovné hodnoty sa nepovažujú za lvalues.
``` c
int funkcia(int a) {
// a nie je lvalue
vrátiť a + 10;
}
int main() {
// 10 nie je lhodnota
10 + 5;
}
```
Rozlišovanie medzi lvalues a rvalues (výrazy, ktoré neoznačujú pamäťové miesto) je kľúčové, pretože iba lvalues je možné modifikovať pomocou operátora priradenia (=).
Tu je príklad, ktorý demonštruje rozdiel:
``` c
int main() {
// a je lvalue
int a =10;
// b je rhodnota
int b =10 + 5;
a + =5; // Toto je platné, pretože a je lvalue
// Toto je chyba pri kompilácii, pretože b je rvalue
b + =5;
}
```
Stručne povedané, lvalue je čokoľvek, čo zodpovedá umiestneniu v pamäti a čo môže byť na ľavej strane úlohy (=).