指標型別強轉,產生右值

2021-07-09 05:04:33 字數 534 閱讀 4878

例子一

int main()

void (*p)(void);

*(int *)&p = (int)fun;//1式

return 0;

1、1式右端將函式指標強轉為int,即右端為整型

2、1式左端先將二級指標&p強轉為一級整型指標。轉化的結果是&p變成一級int指標,則p變成int變數。

(int *)&p強轉會產生右值,值為&p,對右值取值,*(&p) = p

3、左右兩端都為int型,系統不會報錯

例子二int main()

void (*p)(void);

*(int **)&p = (int)fun;//1式

return 0;

1、1式右端將函式指標強轉為int,即右端為整型

2、1式左端先將二級指標&p強轉為int 二級指標,結果&p是指向int的二級指標,p是指向int的一級指標。

(int**)&p將產生一右值,值為&p。*(&p) =p

3、因為1式左端為int *型,右端為int型,型別不匹配。

C語言指標的左值與右值

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

無聊的細節 指標 引用 右值

先看 int i int ii i 我想定義乙個int 的引用ii。但是上面的 不能編譯,因為 i是個右值,不能被引用 只能引用左值嘛 只好加上const int i int ii i int const ii i ok了,const只能放在這裡,下面的 不能編譯 為什麼?int i const i...

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

以下引用 lm whales 左值可以當作右值使用,右值不能當左值用.左值可以出現在 的任何一方,出現在 右方的左值,是把左值當作右值使用,這是非常正常的.右值,不能當作左值使用.能夠 單獨 出現在 左方的是左值 實際是左右值,左值總是可以當作右值使用 只能夠出現在 右方的,是右值 純粹的右值 不能...