簡單的說,就是陣列名出現在賦值符號「=」左邊的就是左值,出現的右邊的就是右值。
舉例: x = y ;
左值:在這個上下文環境中,編譯器認為x的含義是x所代表的位址。當然,這個位址只有編譯器知道咯。
右值:在這個上下文環境中,編譯器認為y是y所代表的位址裡面的內容。至於內容是什麼,只有執行的時候,編譯器才知道。
進入正題--->
建立乙個陣列 :char a[10] ;
a作為右值,很多人估計也在學習的時候,估計會 把它作為 陣列的位址,這是錯誤的!a作為右值時代表的意義和 &a[0]的意義是一樣的,代表 陣列首元素的首位址,而不是陣列的位址。
注意:這裡只是「當作」,並沒有乙個地方來儲存這個位址。
上面說了a作為右值,我們清楚了其含義,那麼a作為左值呢?
a不能作為左值!!!編譯器會認為陣列名作為左值代表的是a的首元素的首位址,但是這個位址開始的一塊記憶體是乙個整體,我們只能訪問陣列的某個元素,而無法把陣列陣列當做乙個整體來進行訪問。所以,我們可以把a[i]當左值,無法把a當左值。也可以這麼理解:a的內部是由很多小部分組成,我們只能通過訪問這些小部分來達到訪問 a的目的。
陣列名a作為左值和右值的區別
簡單而言,出現在賦值符 右邊的就是右值,出現在賦值符 左邊的就是左值。比如,x y。左值 在這個上下文環境中,編譯器認為x的含義是x所代表的位址。這個位址只有編譯器知道,在編譯的時候確定,編譯器在乙個特定的區域儲存這個位址,我們完全不必考慮這個位址儲存在 c語言引入乙個術語 可修改的左值 意思就是,...
指標和陣列(陣列名a作為左值和右值的區別)
簡單而言,出現在賦值符 右邊的就是右值,出現在賦值符 左邊的就是左值。比如,x y。c語言引入乙個術語 可修改的左值 意思就是,出現在賦值符左邊的符號所代表的位址上的內容一定是可以被修改的。換句話說,就是我們只能給非唯讀變數賦值。既然已經明白左值和右值的區別,下面就討論一下陣列作為左值和右值的情況 ...
左值和右值,左值引用和右值引用
左值 lvalue 這一術語 於c語言,用來指代那些可以用在賦值表示式左側的東西,具名物件 在棧和堆上分配的物件,或者其他物件的成員,總之就是又確定儲存空間的東西。而術語右值 rvalue 也是源自c語言,指的是只能在賦值表示式右側出現的東西,如字面值和臨時物件。只能繫結到左值,不能繫結到右值的引用...