指標 位址 到底是左值還是右值

2021-07-16 15:29:16 字數 1086 閱讀 3621

以下引用網友:lm_whales

左值可以當作右值使用,右值不能當左值用.

左值可以出現在=的任何一方,

出現在=右方的左值,是把左值當作右值使用,這是非常正常的.

右值,不能當作左值使用.

能夠(單獨)出現在=左方的是左值(實際是左右值,左值總是可以當作右值使用)

只能夠出現在=右方的,是右值(純粹的右值),不能當作左值使用.

左值代表位址單元,右值代表資料本身.

位址單元裡的資料,是左值變數的右值的含義.

右值包括,純資料,比如常數100,字串常量」12345」等

以及位址單元中儲存的資料.比如x ,這是左值當作右值使用代表的意義.

以及一些常變數(有確切位址的常量,可以象變數一樣有個名字,其實就是變數,只是右值化了,不能當左值使用了)的含義.

左值代表儲存器的乙個單元.

這是乙個物理概念,不僅僅是個位址(位址不過是個編號,是個數值而已),是個實實在在的東西.

右值代表資料,乙個數值而已.

再對上圖紅框部分作解釋:

1.「取位址符作用於乙個左值運算物件」

這句話的意思是:取出的位址值要賦給了等號左邊的指標變數

2.「返回指向該運算物件的指標」

這裡的「指標」只是乙個位址的編號,是乙個常量數值而已,不能被改變,所以是右值

**分析:

int a=112,b=0;

/*假設a的位址為1000*/

int *p=&a,*q=nullptr;

b = *p;

/* *p是個表示式,不是個右值,但是它所指的內容[a的位址1000]被當做右值*/

q = p;

/*q是個指標且是左值*/

指標 == 位址不總是成立

我們通常把位址和指標的概念模糊化了,或者是它倆的含義不只乙個。

什麼是左值和右值

第一次讓左值右值引起我注意的時候是在剛接觸字串和指標的時候編譯器對 的一段錯誤提示 那什麼是左值 l value 那 說的通俗一點就是可以放在賦值號左邊的叫左值 就是可以被賦值的。是乙個位址 左值一般是是乙個變數可以被賦值的變數。const變數是乙個例外只能做右值 那什麼是右值 r value 那 ...

C語言指標的左值與右值

為什麼要用指標?因為計算機是 儲存式執行 不論 指令還是資料,都在記憶體中存放著。指標,首先是記憶體中的乙個位址 同時根據使用目的,有些不同的屬性 目的1.讀 寫乙個變數 物件 這時指標是乙個變數 物件 的起始位址,主要屬性是 資料型別 用於解析這片記憶體中的資料是什麼 常見用法 1.1在呼叫函式時...

面試題 什麼是右值引用?右值引用與左值引用的區別

什麼是左值引用呢?左值引用,就是繫結到左值的引用,通過 來獲得左值引用。那麼,什麼是左值呢?左值,就是在記憶體有確定儲存位址 有變數名,表示式結束依然存在的值。左值可以分為兩類 非常量左值和常量左值 同理,右值也可以分為兩類 非常量右值和常量左值。左值引用舉例說明 int a 10 非常量左值 有確...