什麼是左值和右值

2021-07-30 21:27:34 字數 1046 閱讀 7774

第一次讓左值右值引起我注意的時候是在剛接觸字串和指標的時候編譯器對**的一段錯誤提示

那什麼是左值(l-value)那:

說的通俗一點就是可以放在賦值號左邊的叫左值 就是可以被賦值的。是乙個位址

左值一般是是乙個變數可以被賦值的變數。(const變數是乙個例外只能做右值)

那什麼是右值(r-value)那:

同樣我們可以說是可以放在賦值號右邊的 就是可以給其他變數賦值的,

它可以是乙個變數也可以是乙個常量也可以是乙個表示式。是乙個內容

例如:

#includeint

main()

name="小明";

這個語句中 字元陣列 name 就不是乙個左值 因為name 在定義的時候它是被分配道記憶體的棧中,

而 "小明" 是儲存在記憶體的靜態常量中 ,它在賦值的時候是將這個靜態區的常量的首位址賦給乙個指標變數,

所以name 字元陣列不能做這裡的左值 而且 name 本質上是乙個陣列 是將每個字元儲存在單元格中 ,

雖然在按字串格式輸出的時候是一段字串,但是實際上它本質上也是乙個乙個字元組到一起的。

如果要把一段字串儲存在字元陣列中就需要把乙個乙個字元儲存在陣列中。

什麼是表示式:

表示式由乙個或多個運算元通過操作符組合而成。最簡單的表示式僅包含乙個字面值常量或變數。較複雜的表示式則由操作符以及乙個或多個運算元構成。

乙個變數是表示式但是乙個表示式就不一定是變數了。

確切一點說乙個簡單的賦值語句

左值是乙個位址 左值是左側表示式所代表的位址

右值是右側表示式所代表的內容。

但左值並不一定能被賦值,因為左值可以引用某個常量。 所有的引用都是左值。

右值是表示式的值(不是引用),可以放在賦值右面。

所以所有左值都可以做右值。

函式的引用引數

把引數宣告成引用,實際上改變了預設的按值傳遞引數的傳遞機制。在按值傳遞時,函式操縱的是實參的本地拷貝。當引數是引用時,函式接收的是實參的左值而不是值的拷貝。

這意味著函式知道實參在記憶體中的位置,因而能夠改變它的值或取它的位址。

左值和右值,左值引用和右值引用

左值 lvalue 這一術語 於c語言,用來指代那些可以用在賦值表示式左側的東西,具名物件 在棧和堆上分配的物件,或者其他物件的成員,總之就是又確定儲存空間的東西。而術語右值 rvalue 也是源自c語言,指的是只能在賦值表示式右側出現的東西,如字面值和臨時物件。只能繫結到左值,不能繫結到右值的引用...

左值和右值

c c 語言中可以放在賦值符號左邊的變數,即具有對應的可以由使用者訪問的儲存單元,並且能夠由使用者去改變其值的量。或者說左值是代表乙個記憶體位址值,並且通過這個記憶體位址,就可以對記憶體進行讀並且寫 主要是能寫 操作 這也就是為什麼左值可以被賦值的原因了。相對應的還有右值 當乙個符號或者常量放在操作...

左值和右值

參考 左值就是在賦值中可以放在賦值操作符兩邊的值,比如 int a 1 double b 2.0 a b b a 這裡a和b都是左值,一切變數都是左值,但const量是例外。而右值則是只可以放在賦值操作符右邊的值,比如 int a 0 char b hello 3 a error howdy b e...