【问题标题】:Pointer pointing to itself without typecast?指向自身没有类型转换的指针?
【发布时间】:2014-11-02 18:58:54
【问题描述】:

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

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

这甚至是可取的吗?

【问题讨论】:

  • 这应该是什么问题? &aint**,取消引用它会得到 int*a 最终不会指向自身 - 表达式等价于 a = a
  • 它不是位于某种......无效的内存区域。它是对自己的。有问题。我可以将指针作为普通变量来威胁,而不会收到无效的内存错误吗?

标签: c pointers memory-management memory-address


【解决方案1】:

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

a = a;

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

【讨论】:

    【解决方案2】:

    我正在尝试找出一种方法,如何在本地区域中使用全局指针,然后再使用该指针。

    是这样的:

    void *ptr = &ptr;
    

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

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

    这里,qtr == ptr 是真的。

    不过,我认为您不能使用任何其他指针类型来做到这一点。

    【讨论】:

    • 哦,我如何将例如1 分配给指针并使用它?
    • @Corelation 像这样:void *p = (void *)1;,但这不会使指针指向自身。现在你真正想要实现什么?
    • 解释起来很复杂。我正在努力完成的事情,但我认为这是不可能的。
    • @Corelation 我们可以试试。
    • 其实我自己做的。
    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2021-09-20
    相关资源
    最近更新 更多