2015-06-08 72 views
-1

內存地址通常喜歡0x7ffff3a9ae94以十六進制顯示甲。爲什麼我們不能直接將這些值分配給指針?爲什麼我們不能將值分配給指針

int *ptr=7ffff3a9ae94; 

A「類似」的行爲被證明,當我嘗試這樣做。(這可能是一個單獨的問題本身)

int i=0; 
*ptr=&i; 
&i=ptr; 

這兩種情況都顯示在g++ 4.7.2語法錯誤,這些錯誤,我以爲是指其語言限制。

爲什麼這個限制是在C++實現的?

或者這是某種操作系統的限制?

注:This問題有類似的標題,但它並沒有給我回答我的問題。

+3

因爲'INT * PTR = 7ffff3a9ae94;'是無效的語法。 – usr2564301

+0

它不會識別硬編碼指向**動態內存的指針地址。 – cybersoft

+0

你不能像'7ffff3a9ae94'那樣在'int'中存儲十六進制值。有一些協議需要遵守,或者您需要創建一個協議,並確保其他人也遵循。 –

回答

2

沒有這樣的規則,這樣的:

int *ptr=(int*)0x7ffff3a9ae94;

編譯罰款。 雖然這是一件壞事。

intresting的事實:你可以轉換指針爲整數,反之亦然想法是最大的塊之一說起用C垃圾收集器++一般時。你可以(假設它是愚蠢的)在一些外部緩衝區中序列化內存地址,然後重新分配給某個指針。在GC可能認爲它可以在它刪除,因爲nowone其他點的變量 - 而指針仍然是「有效的」,並會間接引用某個地方在未來

+1

C++ 11解決了GC問題。參見['std :: pointer_safety'](http://en.cppreference.com/w/cpp/memory/gc/pointer_safety) – MSalters

相關問題