这个毫无意义的问题是关于指针的,有人可以指出我正确的方向
变量的地址是否可以合法地分配值0x000000,如果是这样,这是否意味着例如:
#define NULL 0x00000000
int example;
int * pointerToObject = &example;
if(pointerToObject != NULL)
Run Code Online (Sandbox Code Playgroud)
会返回虚假?
Rei*_*ica 10
不,你不能得到有效的(=非空)指针p为其p != NULL返回false.
但请注意,这并不意味着"地址0"(无论这意味着什么).在引用地址和指针时,C++是故意非常抽象的.有一个空指针值,即指向不指向任何位置的指针的值.创建这样一个指针的方法是将空指针常量赋给指针变量.在C++ 03中,空指针常量是文字0,可选地带有后缀(例如0L).C++ 11添加了另一个空指针常量,即文字nullptr.
如何在内部表示空指针值超出了C++语言的范围.在某些(大多数?)系统中,地址值0x00000000用于此,因为用户程序可以指向的任何内容都不能合法地驻留在该地址.但是,没有什么能阻止硬件平台使用该值0xDEADBEEF来表示空指针.在这样的平台上,这段代码:
int *p = 0;
Run Code Online (Sandbox Code Playgroud)
必须编译为将值分配给0xDEADBEEF变量占用的4个字节p.
在这样的平台上,你可以合法地获得一个指向地址的指针0x00000000,但它不会比较等于0,NULL或nullptr.
另一种看待这种情况的方法是以下声明不等同:
int *p = 0;
int *q = reinterpret_cast<int*>(0);
Run Code Online (Sandbox Code Playgroud)
p使用空指针值初始化.q用地址初始化0(reinterpret_cast当然,取决于使用的映射).
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |