在以下代码中,指针指向其自己的内存地址。
#include <stdio.h>
int main()
{
void * ptr;
ptr = &ptr;
return 0;
}
如果指针能指向自己的内存地址会有意义吗?
答案 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 = ...
假设您确实想在某个时候取消引用它。