我想弄清楚如何在局部區域使用全局指針,然後使用指針。這樣做,我意識到C89編譯器不會抱怨這樣做:指針指向自己沒有typecast?
int* a = NULL;
a = *(&a);
這是甚至可取嗎?
我想弄清楚如何在局部區域使用全局指針,然後使用指針。這樣做,我意識到C89編譯器不會抱怨這樣做:指針指向自己沒有typecast?
int* a = NULL;
a = *(&a);
這是甚至可取嗎?
我試圖找出如何在局部區域使用全局指針的方式,然後使用指針。
這是如何:
void *ptr = &ptr;
本(AB)使用void *
和任何其他對象指針類型之間的隱式轉換設施(void **
在這種情況下)。然後ptr
將包含它自己的內存地址,你可以取消對它的引用:
void *qtr = *(void **)ptr;
這裏,qtr == ptr
將是真實的。
雖然我不認爲你可以用任何其他指針類型來做到這一點。
哦,我怎麼能指定例如'1'指針並使用它? – Corelation 2014-11-02 19:06:45
@Corelation像這樣:'void * p =(void *)1;',但這不會使指針指向自身。現在你想實現什麼? – 2014-11-02 19:09:07
解釋起來很複雜。我正在努力完成的事情,但我認爲它不可能。 – Corelation 2014-11-02 19:16:38
*(&a)
在你的情況下等於只需a
(你得到的地址a
,然後解除引用它)。所以,你的代碼有效地這樣做:
a = a;
這是該類型系統完全OK,只是分配給NULL
a
。這就是編譯器不會抱怨的原因。
你是否擅長指針?喜歡..真的很好。 – Corelation 2014-11-02 19:41:10
這應該是錯誤的? '&a'是一個'int **',取消引用它會得到一個'int *'。 'a'不會最終指向自己 - 表達式相當於'a = a'。 – 2014-11-02 19:01:52
它是不是位於..無效的內存區域。它本身就是。有問題。我可以威脅指針作爲一個正常的變量,沒有收到無效的內存錯誤? – Corelation 2014-11-02 19:02:46