2015-08-14 66 views
-1

這到底是什麼?試圖瞭解這個變量定義

int test = *(int*)(0x154512); 
+0

0x154512整數值是將存儲到暫時指針爲int類型那麼它的值將解除引用並複製到測試變量的存儲器地址 –

+0

所以這讀取在存儲器0x154512?還是它讀取0x154512指向的地方? – Jayden

+0

@IInspectable:好吧,它也是一個聲明,就像每個定義一樣:-) –

回答

7
0x154512 

是整數,寫在基部16

(int*)(0x154512) 

說來治療號碼作爲int變量的地址。

*(int*)(0x154512) 

說取消引用該地址,或者獲取該地址的int值。

int test = *(int*)(0x154512) 

說來聲明int變量test並將其分配位於地址0x154512的int值。

2

讓我們把它分解成幾塊。

0x154512是一個十六進制值,或base-16,爲方便起見,它經常用於存儲器地址。

int*聲明一個指向int類型的值的指針。因此,(int*)(0x154512)意味着0x154512被視爲內存地址,我們希望它保存一個整數。

左邊的最後*引用操作,這意味着「讓位於這個指針值」更多或更少。

因此,它將內存地址0x154512處的整數複製到變量「test」。

欲瞭解更多有關指針: http://www.cplusplus.com/doc/tutorial/pointers/

如果你計劃在將來做了很多C++,確保給這個一個不錯的,長的讀取。指針很有趣。

0

一行獲取存儲在0x154512存儲器位置