簡單而言,出現在賦值符「=」右邊的就是右值,出現在賦值符「=」左邊的就是左值。比如,x=y。
c語言引入乙個術語-----「可修改的左值」。意思就是,出現在賦值符左邊的符號所代表的位址上的內容一定是可以被修改的。換句話說,就是我們只能給非唯讀變數賦值。既然已經明白左值和右值的區別,下面就討論一下陣列作為左值和右值的情況:
當a作為右值的時候代表的是什麼意思呢?很多書認為是陣列的首位址,其實這是非常錯誤的。a作為右值時其意義與&a[0]是一樣,代表的是陣列首元素的首位址,而不是陣列的首位址。這是兩碼事。但是注意,這僅僅是代表,並沒有乙個地方(這只是簡單的這麼認為,其具體實現細節不作過多討論)來儲存這個位址,也就是說編譯器並沒有為陣列a分配一塊記憶體來存其位址,這一點就與指標有很大的差別。
a作為右值,我們清楚了其含義,那作為左值呢?
a不能作為左值!這個錯誤幾乎每乙個學生都犯過。編譯器會認為陣列名作為左值代表的意思是a的首元素的首位址,但是這個位址開始的一塊記憶體是乙個總體,我們只能訪問陣列的某個元素而無法把陣列當乙個總體進行訪問。所以我們可以把a[i]當左值,而無法把a當左值。其實我們完全可以把a當乙個普通的變數來看,只不過這個變數內部分為很多小塊,我們只能通過分別訪問這些小塊來達到訪問整個變數a的目的
陣列名a作為左值和右值的區別
簡單而言,出現在賦值符 右邊的就是右值,出現在賦值符 左邊的就是左值。比如,x y。左值 在這個上下文環境中,編譯器認為x的含義是x所代表的位址。這個位址只有編譯器知道,在編譯的時候確定,編譯器在乙個特定的區域儲存這個位址,我們完全不必考慮這個位址儲存在 c語言引入乙個術語 可修改的左值 意思就是,...
陣列名作為左值和右值的區別
簡單的說,就是陣列名出現在賦值符號 左邊的就是左值,出現的右邊的就是右值。舉例 x y 左值 在這個上下文環境中,編譯器認為x的含義是x所代表的位址。當然,這個位址只有編譯器知道咯。右值 在這個上下文環境中,編譯器認為y是y所代表的位址裡面的內容。至於內容是什麼,只有執行的時候,編譯器才知道。進入正...
陣列名和陣列名取位址 指標陣列和陣列指標的區別
一,首先我們先分析下陣列名和陣列名取位址的區別。我們都知道陣列名是陣列的首位址,然而對陣列名取位址又是什麼那?看下面一段程式你就會懂的。分析 由執行結果可知,陣列名a和 a的記憶體位址相同,我們已經知道a a 0 所以有a 1指向陣列中下乙個元素 即為在首位址2751180基礎上加int的位元組數4...