什麼是左值?什麼是右值?
從字面上說所謂的左值就是能在賦值符號的左邊出現的數值,右值就是可以在賦值符號右邊出現的數值。
其實際意義也是如此,那麼哪些值可以在賦值符號左邊出現,哪些可以在等號賦值符號出現的呢?
這就要從分析賦值符號左邊與右邊出現的值的區別著手。能被賦值的數,一定在記憶體裡面占用有一塊記憶體空間,並且這塊空間的內容可以改變,用以儲存賦予的數值。而在賦值符號右邊出現的數則無此要求,因為賦值符號右邊的數被賦值給賦值符號左邊的數,僅僅涉及到數值,也就不涉及記憶體的改變。
我們來看兩條語句:
k = i + 3;
i + 3 = k;
這兩條語句有什麼區別呢?從表面看僅僅只是順序相反而已。我們拿到vs2015中編譯一下,看看有什麼結果:
可以看見,第一條語句可以通過編譯,是合法的,但是第二條語句則報錯說明賦值符號左邊的內容不能作為左值,我們單獨來看第一條語句的彙編**:
可以看見,第一條語句底層分為三條指令:前兩條語句完成賦值符號右邊的加法操作,將結果存在乙個臨時的位置(這裡是暫存器eax),最後將值賦給變數k所在的記憶體中。
我們再來看第二條語句,同樣的執行i+3會將所得到的值先存在乙個臨時的記憶體位置,而賦值符號賦值的物件則是左邊等式最終指向的位址空間,在這裡,這個位址空間是不確定的,因此第二條語句是違反語法的,不能通過編譯。
我們來總結一下左值與右值:
左值:在記憶體中有獨立的記憶體空間,並且這塊空間的內容是可變得,也就是通常所說的變數。
右值:基本所有有值的、可賦值的數都可作為右值,通常為常量(符號常量與const常量等)與變數。
什麼是左值和右值
第一次讓左值右值引起我注意的時候是在剛接觸字串和指標的時候編譯器對 的一段錯誤提示 那什麼是左值 l value 那 說的通俗一點就是可以放在賦值號左邊的叫左值 就是可以被賦值的。是乙個位址 左值一般是是乙個變數可以被賦值的變數。const變數是乙個例外只能做右值 那什麼是右值 r value 那 ...
面試題 什麼是右值引用?右值引用與左值引用的區別
什麼是左值引用呢?左值引用,就是繫結到左值的引用,通過 來獲得左值引用。那麼,什麼是左值呢?左值,就是在記憶體有確定儲存位址 有變數名,表示式結束依然存在的值。左值可以分為兩類 非常量左值和常量左值 同理,右值也可以分為兩類 非常量右值和常量左值。左值引用舉例說明 int a 10 非常量左值 有確...
C語言中什麼叫做左值?右值?
左值就是在賦值中可以放在賦值操作符兩邊的值,比如 int a 1 double b 2.0 a b b a 這裡a和b都是左值,一切變數都是左值,但const變數是例外。p是乙個左值,和變數一樣,只要在 p的右邊加上賦值運算子,就可改變 p的值。如果p是乙個指向常量的指標,p就是乙個不能修改的左值,...