指向自己没有强制转换的指针?

时间:2014-11-02 18:58:55

标签: c pointers memory-management memory-address

我试图找出一种如何在局部区域中使用全局指针然后使用指针的方法。这样做我意识到C89编译器不会抱怨这样做:

int* a = NULL;
a = *(&a);

这甚至是可取的吗?

2 个答案:

答案 0 :(得分:4)

在您的情况下,

*(&a)仅等于a(您获得a的地址,然后取消引用它)。所以你的代码有效地做到了这一点:

a = a;

类型系统完全没问题,只需将NULL分配给a即可。这就是编译器不抱怨的原因。

答案 1 :(得分:2)

  

我试图找出一种如何在局部区域中使用全局指针然后使用指针的方法。

这是:

void *ptr = &ptr;

这个(ab)使用void *和任何其他对象指针类型(在这种情况下为void **)之间的隐式转换工具。然后ptr将包含自己的内存地址,您可以取消引用它:

void *qtr = *(void **)ptr;

在这里,qtr == ptr将是真的。

我不认为你可以用任何其他指针类型做到这一点。