gpt4 book ai didi

c++ - 指针是否可能指向地址 0x000000

转载 作者:太空狗 更新时间:2023-10-29 19:41:44 24 4
gpt4 key购买 nike

这个毫无意义的问题是关于指针的,有人能给我指出正确的方向吗

变量的地址是否可以合法地分配值 0x000000,如果可以,这是否意味着例如:

#define NULL 0x00000000
int example;
int * pointerToObject = &example;

if(pointerToObject != NULL)

会返回 false 吗?

最佳答案

不,您不能获得一个有效的(=非空)指针 p,对于它 p != NULL 返回 false

但是请注意,这并不意味着任何关于“地址 0”的内容(无论它是什么意思)。当提到地址和指针时,C++ 有意非常抽象。有一个空指针值,即不指向任何地方的指针值。创建这种指针的方法是将一个空指针常量赋给一个指针变量。在 C++03 中,空指针常量是字面量 0,可选择带有后缀(例如 0L)。 C++11 添加了另一个空指针常量,字面量 nullptr

如何在内部表示空指针值超出了 C++ 语言的范围。在某些(大多数?)系统上,地址值 0x00000000 用于此目的,因为用户程序可以指向的任何内容都不能合法驻留在该地址。但是,没有什么可以阻止硬件平台使用值 0xDEADBEEF 来表示空指针。在这样的平台上,这段代码:

int *p = 0;

必须编译为将值 0xDEADBEEF 分配给变量 p 占用的 4 个字节。

在这样的平台上,您可以合法地获得指向地址 0x00000000 的指针,但它不会等于 0NULLnullptr


另一种看待这个问题的方式是下面的声明是等价的:

int *p = 0;
int *q = reinterpret_cast<int*>(0);

p 被初始化为空指针值。 q 用地址 0 初始化(当然取决于 reinterpret_cast 中使用的映射)。

关于c++ - 指针是否可能指向地址 0x000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com