空指针的地址是什么?

时间:2014-04-10 13:35:41

标签: c++ pointers null

这是一个非常基本的问题,但我一直在寻找无处可寻的答案。

请考虑以下代码:

myFunction(MyObject** obj) {...}

int main()
{
  MyObject *obj = NULL;
  myFunction(&obj);
}

这是什么结果?

&obj是否为空?未定义?它是否存在段错误?

3 个答案:

答案 0 :(得分:5)

不,&obj不会为NULL, 它将是保存obj"的值的内存地址,指向MyObject的指针。 它就像

一样简单
int x = 0;
int *ptrTox = &x;

在这种情况下,ptrTox将包含x的地址,而不是零。它可以是任何有效的地址。

答案 1 :(得分:4)

指针只是一个存储地址的变量(对该地址的类型有约束)。

因此,虽然它存储了一个地址,但它在内存中也有自己的地址。

在您的情况下,&obj是此变量的地址,既不是NULL也不是未定义,访问它不会发生段错误(如果您不使用{{1}执行操作那显然需要访问所指出的内容。实际上,变量obj在您的代码中声明和定义。

答案 2 :(得分:0)

你的myFunction()获取了obj的地址(作为传递& obj)。您已经创建了一个名为obj的MyObject类的指针。所以它不应该是空的。其中包含obj指针的内存地址。

这里描述了Segfault What is a segmentation fault?