a 與 a 是不是左值?為什麼?

2021-06-23 09:57:52 字數 1296 閱讀 6669

來自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...