左值與右值

按字面意思,通俗地說。以賦值符號 = 為界,= 左邊的就是左值,= 右邊就是右值。 比如:(1) int b = 3;(2) int a = b;第(2)行代碼,a為左值,b為右值。

更深一層,可以將 L-value 的 L, 理解成 Location,表示定位,地址。將 R-value 的 R 理解成 Read,表示讀取數據。現在的計算機數據放在記憶體。記憶體有兩個很基本的屬性:記憶體地址和記憶體裡面放的數據。想像完全一樣的箱子。每個箱子有個編號,用來區分到底是哪個箱子,箱子裡面可以放東西。記憶體地址相當於箱子的編號,記憶體的數據,相當於箱子裡面放的東西。

變數名編譯之後,會映射成記憶體地址。看看a = b的含義。其實就是 將 "b地址記憶體裡面的數據",放到"a地址記憶體"中。

基本介紹

  • 中文名:左值與右值
  • 外文名:lvalue and rvalue
左值右值基本信息,案例列舉,套用注意,

左值右值基本信息

C/C++語言中可以放在賦值符號左邊的變數,即具有對應的可以由用戶訪問的存儲單元,並且能夠由用戶去改變其值的量。左值表示存儲在計算機記憶體的對象,而不是常量或計算的結果。或者說左值是代表一個記憶體地址值,並且通過這個記憶體地址,就可以對記憶體進行讀並且寫(主要是能寫)操作;這也就是為什麼左值可以被賦值的原因了。相對應的還有右值:當一個符號或者常量放在操作符右邊的時候,計算機就讀取他們的“右值”,也就是其代表的真實值。簡單來說就是,左值相當於地址值,右值相當於數據值。右值指的是引用了一個存儲在某個記憶體地址里的數據。

案例列舉

比如: int ia,ib;
ib=0;
ia=ib;
在這裡,首先定義ia,ib。然後對ib賦值,此時計算機取ib的左值,也就是這個符號代表的記憶體位置即記憶體地址值,計算機取0的右值,也就是數值0;然後給ia賦值為ib,此時取ib的右值給ia的左值;
所以說,ib的左值、右值是根據他的位置來說的;
這也算是形式語言的一個有意思之處吧。

套用注意

L-value中的L指的是Location,表示可定址。Avalue (computer science)that has an address.
R-value中的R指的是Read,表示可讀。in computer science, a value that does not have an address in a computer language.
左值和右值是相對於賦值表達式而言的。左值是能出現在賦值表達式左邊的表達式。左值表達式可以分為可讀寫的左值和唯讀左值。右值是可以出現在賦值表達式右邊的表達式,他可以是不占據記憶體空間的臨時量或字面量,可以是不具有寫入權的空間實體。如
int a=3;
const int b=5;
a=b+2; //a是左值,b+2是右值
b=a+2; //錯!b是唯讀的左值但無寫入權,不能出現在賦值符號左邊
(a=4)+=28; //a=4是左值表達式,28是右值,+=為賦值操作符
34=a+2; //錯!34是字面量不能做左值

相關詞條

熱門詞條

聯絡我們