2011-08-26 68 views
2

是否有可能获得数组指针指向的名称?是否可以找出变量名称,指向的指针?

例如:

char name[20]; 
char *p = name 
int door_no; 
int *q = &door_no 

在上面的例子中,我们与阵列name和指针q指向door_no但什么给数组的基本地址,如果,我必须知道变量名数组是指向?什么是变量名称指针q指向?可能吗?我试着得出结论,这是不可能的,但我仍然试图得到解决方案。你认为什么人?有什么办法可以做到吗?

+1

你为什么要这么做? –

回答

18

不,你不能那样做。在你的代码被编译和链接后(除非你保留调试信息),变量名甚至不存在,所以你不能在运行时得到它。

在C中(与JavaScript或古典Lisp等非常动态的语言相比),变量名称的作用仅仅是告诉编译器/链接器当您提到变量时,您指向哪个声明源代码。一旦这些连接已经在编译器的内部数据结构中进行并表示出来,那么名称就不再使用(除了调试和/或漂亮地打印来自编译器的错误消息外)。

+0

酷它给了我一些明智的理由谢谢! – niko

+0

+1打我。 :-) –

1

Henning在我之前说过的一切都是正确的。另外,指针的目标可能是甚至没有变量名称。例如,考虑:

char a; 
char *ptr = &a + 5; 

现在PTR是指向不具有任何与一个(事实上可能会指向分配给你的程序内存之外,并与指针做任何可能导致地方分段故障)。

0

如果您传统编译和执行程序,则无法获取变量pq的名称,因为编译器所做的一件事是忘记变量的名称,只保留地址。

根据您要做的事情,您可以在保留名称的非传统执行环境中执行该程序。例如,

 
~ $ cat t.c 
main(){ 
char name[20]; 
char *p=name; 
int door_no; 
int *q= & door_no; 
} 
~ $ frama-c -val t.c 
[kernel] preprocessing with "gcc -C -E -I. t.c" 
... 
[value] ====== VALUES COMPUTED ====== 
[value] Values for function main: 
      p ∈ {{ &name ;}} 
      q ∈ {{ &door_no ;}} 
      __retres ∈ {0; } 
相关问题