2014-11-02 68 views
0

我想弄清楚如何在局部區域使用全局指針,然後使用指針。這樣做,我意識到C89編譯器不會抱怨這樣做:指針指向自己沒有typecast?

int* a = NULL; 
a = *(&a); 

這是甚至可取嗎?

+1

這應該是錯誤的? '&a'是一個'int **',取消引用它會得到一個'int *'。 'a'不會最終指向自己 - 表達式相當於'a = a'。 – 2014-11-02 19:01:52

+0

它是不是位於..無效的內存區域。它本身就是。有問題。我可以威脅指針作爲一個正常的變量,沒有收到無效的內存錯誤? – Corelation 2014-11-02 19:02:46

回答

2

我試圖找出如何在局部區域使用全局指針的方式,然後使用指針。

這是如何:

void *ptr = &ptr; 

本(AB)使用void *和任何其他對象指針類型之間的隱式轉換設施(void **在這種情況下)。然後ptr將包含它自己的內存地址,你可以取消對它的引用:

void *qtr = *(void **)ptr; 

這裏,qtr == ptr將是真實的。

雖然我不認爲你可以用任何其他指針類型來做到這一點。

+0

哦,我怎麼能指定例如'1'指針並使用它? – Corelation 2014-11-02 19:06:45

+0

@Corelation像這樣:'void * p =(void *)1;',但這不會使指針指向自身。現在你想實現什麼? – 2014-11-02 19:09:07

+0

解釋起來很複雜。我正在努力完成的事情,但我認爲它不可能。 – Corelation 2014-11-02 19:16:38

4

*(&a)在你的情況下等於只需a(你得到的地址a,然後解除引用它)。所以,你的代碼有效地這樣做:

a = a; 

這是該類型系統完全OK,只是分配給NULLa。這就是編譯器不會抱怨的原因。

+0

你是否擅長指針?喜歡..真的很好。 – Corelation 2014-11-02 19:41:10