我试图找出一种如何在局部区域中使用全局指针然后使用指针的方法。这样做我意识到C89编译器不会抱怨这样做:
int* a = NULL;
a = *(&a);
这甚至是可取的吗?
答案 0 :(得分:4)
*(&a)
仅等于a
(您获得a
的地址,然后取消引用它)。所以你的代码有效地做到了这一点:
a = a;
类型系统完全没问题,只需将NULL
分配给a
即可。这就是编译器不抱怨的原因。
答案 1 :(得分:2)
我试图找出一种如何在局部区域中使用全局指针然后使用指针的方法。
这是:
void *ptr = &ptr;
这个(ab)使用void *
和任何其他对象指针类型(在这种情况下为void **
)之间的隐式转换工具。然后ptr
将包含自己的内存地址,您可以取消引用它:
void *qtr = *(void **)ptr;
在这里,qtr == ptr
将是真的。
我不认为你可以用任何其他指针类型做到这一点。