空指针的地址是什么
What is the address of a null pointer?
这是一个非常基本的问题,但我到处找都找不到答案。
考虑以下代码:
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什么是分段错误?
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中为零大小的分配返回唯一地址背后的基本原理是什么?
- 是什么原因导致指定为RtlvalidateHeap的无效地址
- 在 Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么
- 数组与其地址之间的关系是什么?
- 将绝对地址强制转换为指针变量的现代C++方法是什么?
- 跳过的内存地址是什么?
- C++:维护有序的ip地址表的最快方法是什么
- 此指针的内存地址是什么
- x 在变量地址中的意义是什么?
- 函数从堆栈返回的地址是什么
- 指针地址的含义是什么
- 堆栈上的线程返回地址是什么
- 为什么地址运算符是C++类的默认成员,它是什么
- 在执行函数指针时,使用运算符地址与不使用运算符地址的目的是什么
- 若指针是一个地址,那个么什么是引用
- (C++内存管理)如果我们有一个 int x = 1234,并且 int &y = x...那么堆栈上 y 的地址是什么?
- 打印成员函数地址的最简单方法是什么?
- 当获取一个地址时,模板类型(类/函数)的实例化规则是什么?
- 空指针的地址是什么