i++不能爲左值的原因

(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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章