NULL指针是否占用任何内存? 如果它占用了内存,那么它消耗了多少内存,如果需要内存,那么 NULL 指针的重要用途是什么?
答案 0 :(得分:8)
指针值(NULL
或不需要)需要一些空间来存储和表示(大多数现代桌面系统上有4到8个字节,但可能是一些奇怪的大小取决于架构)。
指针值NULL
表示明确定义的"无处&#34 ;;它是一个无效指针值,保证比较不等于内存中任何对象或函数的地址。宏NULL
设置为空指针常量,它是一个零值整数表达式(裸0
或(void *) 0
或其他一些表达式,其值为0
)。
编译完代码后,空指针常量将替换为该特定平台(可能为0x00000000
或0xFFFFFFFF
的相应空指针值 ,或0xDEADBEEF
,或其他一些值)。
答案 1 :(得分:5)
任何指针值(包括NULL
)都需要一小段系统相关的空间来表达或存储。
这是指向对象(如果有的话)可能需要的任何空间的完全独立的考虑因素。保证NULL
指针不指向任何对象,但不保证非NULL
指针指向对象。另一方面,可能有多个指向同一对象的指针。
在有意使用NULL
指针的情况下,它通常用于显式表达无效指针,因为您无法从任何其他指针值判断该指针是否有效。这可能很有用,例如,标记未知长度指针数组末尾的标记值,或作为指示失败的函数返回值。后者的规范示例可能是malloc()
,如果无法分配请求的空间,则会返回NULL
。
答案 2 :(得分:3)
NULL
指针不分配任何内容。如果您有这样的定义:
int *x = NULL;
这意味着指向x
的变量int
并未指向任何内容。然后,您可以检查if (x == NULL)
以查看它是否指向有效内存。