這開始作爲一個評論,但後來我意識到它可能更好地作爲一個實際的答案。
所述問題的簡短回答是,正如其他人已經指出的那樣,否,您無法將內存位置映射到對應於該位置的變量名稱。
想想看會發生什麼,如果它真的有可能做你想要的東西。這是你的一個想法實驗。我假設C,但它應該同樣適用於任何支持指向任意內存位置的指針的語言(包括其他變量佔用的內存位置)。
假設你有兩個指針開始了一個相同的內存位置:
char p[] = DUMMY;
char *q = &p;
現在,如果你以某種方式去解引用&q
,你會得到p
。好吧,從理論的角度來看,這種工作很有用。現在,添加:
char *r = &q;
現在,你有雙重間接。如果你試圖找出名字指向名字p
的同一個內存位置,結果如何?如果我記得指針的語法正確,你會得到*q
和*(*r)
。編譯器如何告訴你,特別是在運行時?
假設p[]
足夠大。對於任意數量的n
,更換*q
分配方式:
char *q = &p + n;
什麼是現在的類似去提領q
結果呢?如果q
現在超出p[]
的範圍,結果會是什麼? (好吧,後者可能只是q
,但那有什麼意義呢?)
或者,在圖形用戶界面廣泛出現之前,這種做法相當普遍。試試這個(不要介意實際的地址)。
short *videomemory = 0xB8000;
/* and then, at some later point... */
videomemory += 4;
然後,嘗試尋找對應於videomemory
的值的地址(0xB8004,在上述的)。結果是什麼?原則上,「陣列」videomemory[]
無限延伸,甚至環繞(讓我們暫時忽略內存保護),因此任何東西將映射到內存「佔用」videomemory[]
,只有足夠大的數組索引。
可能嗎?取決於編譯器/ RTE。但我想在C中你的機會是有限的。可能不會。這是一個stackoverflow問題。 – Falcon
以及我一直在嘗試它。我甚至認爲它不可能,但仍然讓我知道背後的任何原因。是什麼讓它不可能 – niko
代碼在運行時缺少關於符號的信息。如果符號以某種方式在二進制文件中,您可能能夠提取它們並將它們與內存地址相關聯。但是,我不認爲是這樣。 – Falcon