是否可以获得指向指针的数组名称?
示例:
char name[20];
char *p = name
int door_no;
int *q = &door_no
在上面的例子中,我们给出了数组的基地址,数组为name
,指针q
指向door_no
,但如果,我必须知道数组指向的变量?变量名称指针q
指向的是什么?可能吗?我尝试并得出结论,这是不可能的,但我仍然试图得到解决方案。你觉得伙计们怎么样?有没有办法让它成为可能?
答案 0 :(得分:18)
不,你不能这样做。在编译和链接代码之后,变量的名称甚至不会存在(除非您保持调试信息),因此您无法在运行时获取它。
在C中(与非常动态的语言,如JavaScript或经典的Lisp相比),变量名的唯一角色是告诉编译器/链接器当你提到时你指的是哪个声明源代码中的变量。一旦在编译器的内部数据结构中建立并表示了这些连接,就不再使用这些名称(再次,除了从编译器调试和/或漂亮打印错误消息之外)。
答案 1 :(得分:1)
亨宁在我面前说的一切都是正确的。此外,指针的目标可能甚至没有变量名。例如,考虑:
char a;
char *ptr = &a + 5;
现在ptr指向与a无关的某个地方(实际上可能指向为你的程序分配的内存之外,用指针做任何事情都可能导致分段错误)。
答案 2 :(得分:0)
如果你传统上编译和执行程序,就不可能得到变量p
或q
的名称,因为编译器所做的一件事就是忘记了变量,只保留地址。
根据您要执行的操作,您可以在保留名称的非传统执行环境中执行该程序。例如,
~ $ 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; }