你知道这是什么意思吗?不确定是哪种语言。
(void *) 0x00
这段代码表示一个指针,指向内存地址为0x00的空间,其中“void *”代表未定义类型的指针。你知道这是什么意思吗?不确定是哪种语言。
(void *) 0x00
这段代码表示一个指针,指向内存地址为0x00的空间,其中“void *”代表未定义类型的指针。#ifndef NULL
# define NULL ((void *) 0)
#endif
那么你就可以在不同的函数中使用NULL!
看起来像C语言,它表示指向内存位置0的指针。("void *" 表示指向原始内存的指针,并提示编译器/程序员该类型未知或未指定)
澄清一下:它是一个包含值0的指针,在大多数平台上,这个特殊值被称为NULL,表示无效/未初始化的指针,对其进行解引用会导致异常。在某些平台上(例如一些微控制器),内存位置0是一个有效的指针值。
void *
,称为空指针常量。如果将空指针常量转换为指针类型,则得到的指针称为空指针,并保证与任何对象或函数的指针比较不相等。 - John Bode!p
将始终评估为true,无论平台使用哪个位模式表示空指针。从源代码的角度来看,空指针总是由0表示。如果实际的空指针值不是所有位都为0,则由实现映射!p
到!=actual null pointer value
。 - John Bode我记得这是一个 C/C++ 的空指针 :)
强制类型转换建议使用C或C++。这是将整数零强制转换为指针类型,这意味着它是空指针。这是在C中定义空指针的标准方式(除了更常用的(void *)0
),但在C++中它是特定类型的空指针值。
NULL
来表示空指针常量;如果我没有包含任何定义NULL
的标准头文件,那么一个简单的0
也可以胜任(我宁愿使用0
而不是仅为了NULL
而#include <stddef.h>
)。 - pmg(void *)0
是一个空指针,类型为void *
。在C中,这是一个有用的void指针,因为任何数据指针类型都可以自由地使用void *
类型,转换是自动的。在C++中,由于其更严格的类型,这种方法不起作用,转换必须是显式的。在C中,int * ptr = (void *)0;
是合法的,int * ptr = 0;
也是合法的,两者意思相同。在C++中,只有第二个是合法的。 - David Thornley(void *)
0)。 空指针值(底层平台用于表示“无处”的位模式)可能是所有位都为0,也可能是其他值。 实现处理将空指针常量(0)映射到空指针值(可能为0,也可能是其他值)。 - John Bode!p
这样的表达式在各个平台上的行为将不会统一。如果编译器不符合此规范,则它要么非常有问题,要么与特定架构非常紧密耦合。 - John Bode
(void *) 0
不一定指向地址0。在指针上下文中使用0
(或0x00
)会产生空指针。对应于空指针的物理地址是实现定义的。例如,它可以是0xFFFFAAAA
。如果在某些微控制器上地址0是可访问和可用的,则该平台上的编译器应将(void *) 0
转换为其他物理地址。 - AnT stands with Russia