空指针的地址是什么

What is the address of a null pointer?

本文关键字:是什么 地址 空指针      更新时间:2023-10-16

这是一个非常基本的问题,但我到处找都找不到答案。

考虑以下代码:

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

结果是什么?

&obj为空吗?未定义?它会出错吗?

否,&obj不会为NULL,它将是保存"obj的值"(指向MyObject的指针)的内存地址。它就像一样简单

int x = 0;
int *ptrTox = &x;

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

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

因此,当它存储地址时,它在内存中也有自己的地址。

在您的情况下,&obj是该变量的地址,既不是NULL,也不是未定义的,访问它不会出错(显然,如果您避免使用obj执行需要访问所指向内容的操作)。实际上,变量obj是在代码中声明和定义的。

myFunction()正在获取obj的地址(作为传递&obj)。您已经创建了一个名为obj的MyObject类指针。因此它不应该为null。保存obj指针的内存地址。

此处描述Segfault什么是分段错误?