1樓:匿名使用者
c++語言中可以放在等號左邊的變數,即具有對應的可以由使用者訪問的儲存單元,並且能夠由使用者去改變其值的量。 或者說左值是代表一個記憶體地址值,通過這個記憶體地址,就可以對記憶體進行讀寫操作;這也就是為什麼左值可以被賦值的原因了。 相對應的還有右值:
當一個符號或者常量放在操作符右邊的時候,計算機就讀取他們的「右值」,也就是其代表的真實值。 比如: int ia,ib; ib=0; ia=ib; 在這裡,首先定義ia,ib。
然後對ib賦值,此時計算機取ib的左值,也就是這個符號代表的記憶體位置即記憶體地址值,計算機取0的右值,也就是數值0;然後給ia賦值為ib,此時取ib的右值給ia的左值; 所以說,ib的左值、右值是根據他的位置來說的; 這也算是形式語言的一個有意思之處吧。
2樓:匿名使用者
=是賦值運算子,它的作用是將一個表示式的值賦給一個左值。一個表示式或者是一個左值,或者是一個右值。所謂左值是指一個能用於賦值運算左邊的表示式。
左值必須能夠被修改,不能是常量。這裡是用變數作左值,指標和引用也可以作左值。例如:
int a, b, c;
a=3;b=4;
c = a + b )*2*a - b) /得出14
左值和右值的區別
3樓:帳號已登出
變數做左值和右值的區別:
如 x = 2;
這裡x為整形變數,這裡作為左值,代表的是一塊記憶體單元,表示的是地址。
再如x = y;
現在看變數做右值情況,y做右值,這裡呢就不在表示地址,而是代表該記憶體單元上的值!然後賦給x。
常量做左值和右值的區別。
繼續 x = 2;
這裡2做右值, 2是一個常量,沒有任何疑問。
而如果 1 = 2;
這裡我們看左值,是1是常量,這裡就會有問題了,編譯會報錯!因為常量不可被修改、不可以被賦值!所以大家可能會聽過或見過」可修改/不可修改的左值」。
陣列名做左值和右值的區別。
例如有字元陣列char a[100];
當a做右值時候,我們可以把它賦給char *型別的指標,用來指向這個陣列,這種情況下陣列名做右值代表該陣列首元素的首地址,是常量,是完全可以的。
而陣列名無論右值和還是左值,都代表是地址,是常量,因此它不可以做左值,因為常量不可被修改!所以不少同學試圖再定義陣列之後再試圖對陣列賦字串都是錯誤的!
字串常量做右值。
字串常量想必大家都很清楚,是用雙引號括起來的字串,既然也是常量,也理所當然不可以做左值,但做右值呢?
答案是,會表示該字串在記憶體中儲存位置的首地址。就就是char * p = 用法的原因。
左值與右值的介紹
4樓:有恃無恐
c/c++語言中可以放在賦值符號左邊的變數,左值表示儲存在計算機記憶體的物件,左值相當於地址值。右值:當一個符號或者常量放在操作符右邊的時候,計算機就讀取他們的「右值」,也就是其代表的真實值,右值相當於資料值。
左值和右值的區別,什麼是左值?
在c語言學習過程中,大家或許聽到過左值和右值的概念,甚至在除錯程式時編譯器也會給出 left operand must be l value 即左運算元必須為左值!今天我們將為大家詳細解釋這兩個詞,以及兩者的區別!簡單而言,在賦值運算子 左邊的就是左值,在賦值運算子 後邊的就是右值,感覺像是廢話,但...
左值和右值的區別,什麼是左值?
在c語言學習過程中,大家或許聽到過左值和右值的概念,甚至在除錯程式時編譯器也會給出 left operand must be l value 即左運算元必須為左值!今天我們將為大家詳細解釋這兩個詞,以及兩者的區別!簡單而言,在賦值運算子 左邊的就是左值,在賦值運算子 後邊的就是右值,感覺像是廢話,但...
左值和右值的區別,什麼是左值?
在c語言學習過程中,大家或許聽到過左值和右值的概念,甚至在除錯程式時編譯器也會給出 left operand must be l value 即左運算元必須為左值!今天我們將為大家詳細解釋這兩個詞,以及兩者的區別!簡單而言,在賦值運算子 左邊的就是左值,在賦值運算子 後邊的就是右值,感覺像是廢話,但...