这开始作为一个评论,但后来我意识到它可能更好地作为一个实际的答案。
所述问题的简短回答是,正如其他人已经指出的那样,否,您无法将内存位置映射到对应于该位置的变量名称。
想想看会发生什么,如果它真的有可能做你想要的东西。这是你的一个想法实验。我假设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