來自csdn的討論帖:
貼上某人的總結:
1.什麼是左值
int a = 2;
這句話裡面2是乙個"值",a是乙個變數,它有乙個4位元組的記憶體區域,這個記憶體區域裡面裝著2,這就暗示這個記憶體區域可以被改寫,可以被賦值,可以出現在=號的左邊
a是乙個"左值"
而2就僅僅是乙個2,它是乙個值,我看看到它,就認為它是乙個2,只能把他賦給別人,不能被賦值
2是乙個"右值",而且不能是"左值",而a可以賦值給別人,所以a即是乙個"左值"又是乙個"右值"
2.文字常量和變數都可以作右值
3.所有的左值都是右值,反之就不見得
《重要》4.並不是左值就是可以賦值的值
可以被賦值的左值稱為modifiable l-values
不可賦值的左值(nonmodifiable l-value)大概有
a. 常量值,const int i;是乙個左值,但是他是不可賦值的
b. 乙個陣列型別,它是左值,但是他是不能賦值的
c. 如果乙個structures或unions裡面包含常量值,他就是不可賦值的
5.左值大概包括
a. an identifier of integral, floating, pointer, structure, or union type
b. a subscript ([ ]) expression that does not evaluate to an array
c. a member-selection expression (–> or .)
d. a unary-indirection (*) expression that does not refer to an array
e. an l-value expression in parentheses
f. a const object (a nonmodifiable l-value)
6.引用型別永遠是左值
7.左值通常是乙個變數
8.舉乙個例子
void main()
8.現在來看++a,a++,a+5,a=6問題
++a = 22;裡面先++a,返回的東西是 a, 而a是乙個變數,顯然是乙個是乙個左值,他可被程式定址,可以改變它的值
a++呢?a++是什麼東西?a++是乙個引用了臨時物件的表示式,使用者不能定址該物件,也不能改變它的值,所以它是右值,不是左值
a+5也是乙個引用了臨時物件的表示式,使用者不能定址該物件,也不能改變它的值,所以它是右值,不是左值
a=6顯然是左值,就不用說了
這樣說,大家理解了嗎?
i在C C 中是不是左值
前些天寫blog左值與右值 c 學習 時,已經確認在c 中,i 是左值。可是,今天在newsmth的c語言版上看到乙個相關的問題。發現在c語言中,i不是左值。乙個很簡單的例子 int main 儲存成 hello.c 分別用 gcc clang cl cc編譯 hello.c in function...
a 為什麼不能作為左值
下面引用在部落格上看到的乙個易於理解的回答 首先說左值和右值的定義 變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的 addressable 對於每乙個變數都有兩個值與其相聯 1 它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值 rvalue,讀做are value...
i 為什麼不能作為左值?
1 首先說左值和右值的定義 變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的 addressable 對於每乙個變數都有兩個值與其相聯 1 它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值 rvalue,讀做are value 我們也可認為右值的意思是被讀取的值 r...