指针可以指向C中自身的内存地址吗?

时间:2017-08-19 07:39:50

标签: c pointers memory-address

在以下代码中,指针指向其自己的内存地址。

#include <stdio.h>

int main() 
{
    void * ptr;
    ptr = &ptr;

    return 0;
}

如果指针能指向自己的内存地址会有意义吗?

4 个答案:

答案 0 :(得分:7)

不,这没有意义。 如果你能找到变量ptr,你可以做&amp; ptr。 它会给你与ptr。

的内容相同的结果

此外,由于ptr只讲述自己的一些事情,无论如何它都是无用的。它不会为您的其他程序提供任何有意义的信息。

想想看,有一个例外。您可以使用ptr ==&amp; ptr作为一种特殊值的情况,如NULL。所以,在这种情况下,我认为它很有用。

它的乐趣在于,在这种情况下,值&amp; ptr作为一个特殊值是有意义的,而它作为某些东西的地址没有意义,就像NULL一样。

答案 1 :(得分:5)

  

指针指向自己的内存地址

这是合法的。

是否&#34; 有意义&#34; 100%依赖于上下文,虽然&#34; 主要是基于选项的&#34;。

答案 2 :(得分:2)

这是有道理的,因为它是合法的C语言分配。另一个问题是什么。 IMO这只是学术上的考虑,没有任何实际用途。

答案 3 :(得分:-3)

尚未提及的另一个方面是违反严格打字 如果ptr的类型为void *,则&ptr的类型为void **,由于类型不匹配(ptr,不应将其分配给void * } vs。void **)。
但是,当涉及到指针类型时,C和C ++通常非常宽松,只要有人指定void *,因为void *应该能够指向任何东西。
但是假设你实际上想要正确地解除引用ptr,你会(在你的任务之后)必须这样做

*(void **)ptr = ...

假设您确实想在某个时候取消引用它。