2014-01-26 92 views
-3

好時,我居然不知道我應該怎麼形容這樣的:奇怪的行爲增加值指針

uintptr_t * ptr = (uintptr_t *) 0x21CC9004; 

std::cout << ptr + 0x10 << std::endl; 
std::cout << std::hex << 0x21CC9004 + 0x10 << std::endl; 

第一行產生21CC9044和第二線產生21CC9014。

那是怎麼回事?有人可以解釋這一點,我可以如何添加0x10到​​我的指針從第二行得到結果?

+1

指針運算是根據「sizeof(T)」單位(其中「T」是引用類型)來定義的,而不是以字節爲單位。 – 2014-01-26 21:17:41

+1

請問你能更具體些嗎? – user3183815

+0

另外,除非'(uintptr_t *)0x21CC9004'是一個有效的指針,否則'ptr + 0x10'是未定義的行爲。 – 2014-01-26 21:21:19

回答

1

在第一種情況下使用指針算術。這意味着如果sizeof(unsigned int)= 4,加0x10實際上會將0x10 * sizeof(unsigned int)加到等於0x40的指針值上。

在第二種情況下,數字。

+1

有沒有必要發佈其他答案。已經有很多重複。 – 2014-01-26 21:20:26

+0

那麼對我來說是有道理的,有什麼辦法可以告訴編譯器處理ptr als整數嗎?任何演員? – user3183815

+0

他們的問題應該被標記爲重複。 –