a 為什麼不能作為左值

2021-08-16 17:41:18 字數 700 閱讀 7470

下面引用在部落格上看到的乙個易於理解的回答:

首先說左值和右值的定義:

變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的(addressable)對於每乙個變數都有兩個值與其相聯:

1).它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值(rvalue,讀做are-value).我們也可認為右值的意思是被讀取的值

(read value)。文字常量和變數都可 被用作右值。

2).它的位址值——即儲存資料值的那塊記憶體的位址。它有時被稱為變數的左值(lvalue,讀作ell-value)。我們也可認為左值的意思是位置值

location value文字常量不能被用作左值.

(2)首先對於i++的實現是:

int temp;

temp = i;

i = i+1;

return temp;

而++i的實現是:

i = i+1;

return i;

所以對於我們提出來的問題已經能得到解決了:

i++=5; 是錯誤的是因為i++返回的是編譯器自動分配的臨時變數temp,而這個temp並不是你程式中定義的可定址變數的引用 ,也就是說你不能通

過位址對temp進行操作.(換句話說就是不能作為左值),因為temp是乙個臨時變數

++i=5;是正確的就是因為其返回值就是i;

i 為什麼不能作為左值?

1 首先說左值和右值的定義 變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的 addressable 對於每乙個變數都有兩個值與其相聯 1 它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值 rvalue,讀做are value 我們也可認為右值的意思是被讀取的值 r...

i 為什麼不能作為左值,而 i可以作為左值

今天看書見到如下 int a 2 a 根據操作符的優先順序和結合性知,操作符 的優先順序為3,結合性為右結合,即 a 可以理解為 a 但我把 放在vs2015上,結果報錯,如圖 意思就是所a 不能作為左值,那a 為什麼不能作為左值呢?我們先來看左值的定義 左值 lvalue 是b語言 c語言 c 語...

為什麼 i 不能做左值,而 i 可以

算下來已經很久以前了,大概有那麼幾個星期了吧。看到了帖子上有人問為什麼下面的語句的對錯原因 int i 0 int ip i 錯誤 int ip i 正確 看到上面的語句,當時以為兩個都是是對的啊,可是當我用vs2010的編譯器試了試之後,才發現第乙個取位址確實是錯誤的語句,具體的提示是 error...