(1)首先說左值和右值的定義:
變量和文字常量都有存儲區,並且有相關的類型。區別在於變量是可尋址的(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並不是你程序中定義的可尋址變量的引用 ,也就是說你不能通
過地址對它進行操作.(換句話說就是不能作爲左值)
++i=5;是正確的就是因爲其返回值就是i;