是否有可能找到变量名,指针指向?

时间:2011-08-26 13:32:13

标签: c

是否可以获得指向指针的数组名称?

示例:

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

在上面的例子中,我们给出了数组的基地址,数组为name,指针q指向door_no,但如果,我必须知道数组指向的变量?变量名称指针q指向的是什么?可能吗?我尝试并得出结论,这是不可能的,但我仍然试图得到解决方案。你觉得伙计们怎么样?有没有办法让它成为可能?

3 个答案:

答案 0 :(得分:18)

不,你不能这样做。在编译和链接代码之后,变量的名称甚至不会存在(除非您保持调试信息),因此您无法在运行时获取它。

在C中(与非常动态的语言,如JavaScript或经典的Lisp相比),变量名的唯一角色是告诉编译器/链接器当你提到时你指的是哪个声明源代码中的变量。一旦在编译器的内部数据结构中建立并表示了这些连接,就不再使用这些名称(再次,除了从编译器调试和/或漂亮打印错误消息之外)。

答案 1 :(得分:1)

亨宁在我面前说的一切都是正确的。此外,指针的目标可能甚至没有变量名。例如,考虑:

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

现在ptr指向与a无关的某个地方(实际上可能指向为你的程序分配的内存之外,用指针做任何事情都可能导致分段错误)。

答案 2 :(得分: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; }
相关问题