左值就是那些可以出現在賦值符號左邊的東西,右值就是那些可以出現在賦值符號右邊的東西。
這裡有個例子:
a = b + 25;
a是個左值,因為它標識了乙個可以儲存結果值的地點;b+25是個右值,因為它只指定了乙個值。
它們可以互換嗎?
b + 25 = a;
原先用作左值的a此時也可以當作右值,因為每個位置都包含乙個值。然而,b+25不能作為左值,因為它並未標示乙個特定的位置。因此,這條賦值語句是非法的。
其實,當計算機計算b+25時,它的結果必然儲存於計算機的某個地方。但是,這個地方程式設計師沒有辦法**,也無法保證這個表示式下次還會儲存於同乙個地方。其結果就是這個表示式不能是乙個左值。基於同樣的理由,字面值常量也都不是左值。
聽上去似乎變數可以作為左值而表示式不能作為左值,其實不然。在下面的賦值語句中,左值便是乙個表示式:
int a[30];
...a[b+10] = 0;
下標引用其實是乙個操作符,所以賦值運算子的左側其實是乙個表示式,但它卻是乙個合法的左值,因為它標識了乙個特定的位置,我們在以後的程式中可以引用它。
這裡還有乙個例子:
int a , *pi;
...pi = &a;
*pi = 20;
第二條賦值語句,賦值運算子的左邊顯然是乙個表示式,但它也是乙個合法的左值。指標pi的值是某個確定位置的位址,解引用操作符時機器指向那個位置。
當*pi作為左值使用時,這個表示式指定了需要進行修改的位置;當它作為右值使用時,就是提取當前儲存於這個位置的值。
所以,有些操作符,像解引用和陣列下標引用,他們的表示式運算結果是乙個左值。
最後總結,左值意味著乙個位置,右值意味著乙個值。在使用右值的地方也可以使用左值,但在需要使用左值的地方不能使用右值。
左值和右值,左值引用和右值引用
左值 lvalue 這一術語 於c語言,用來指代那些可以用在賦值表示式左側的東西,具名物件 在棧和堆上分配的物件,或者其他物件的成員,總之就是又確定儲存空間的東西。而術語右值 rvalue 也是源自c語言,指的是只能在賦值表示式右側出現的東西,如字面值和臨時物件。只能繫結到左值,不能繫結到右值的引用...
左值和右值
c c 語言中可以放在賦值符號左邊的變數,即具有對應的可以由使用者訪問的儲存單元,並且能夠由使用者去改變其值的量。或者說左值是代表乙個記憶體位址值,並且通過這個記憶體位址,就可以對記憶體進行讀並且寫 主要是能寫 操作 這也就是為什麼左值可以被賦值的原因了。相對應的還有右值 當乙個符號或者常量放在操作...
左值和右值
參考 左值就是在賦值中可以放在賦值操作符兩邊的值,比如 int a 1 double b 2.0 a b b a 這裡a和b都是左值,一切變數都是左值,但const量是例外。而右值則是只可以放在賦值操作符右邊的值,比如 int a 0 char b hello 3 a error howdy b e...