NULL
是在 <stddef.h>
中定义的一个宏,用于表示 null 指针
;它可以被定义为 ((void*)0)
。而 NULL
则是 ASCII
字符集中第一个字符的名称。它们之间有什么区别呢?
NULL
是在 <stddef.h>
中定义的一个宏,用于表示 null 指针
;它可以被定义为 ((void*)0)
。而 NULL
则是 ASCII
字符集中第一个字符的名称。它们之间有什么区别呢?
NULL和NUL代表的是相同的概念:它们都表示值的缺失。唯一的区别是-就像你所说的-NULL是一个宏,而NUL是给第一个ASCII字符命名的名称。您可能会遇到称为NUL的宏的唯一场景是这样的:
#define NUL '\0'
#define NUL '\0'
。 - chqrlieC标准中不存在NUL
这个术语。C标准使用以下术语:
null character (\0)
NULL macro
null pointer
null pointer constant
null preprocessing directive
null statement
null wide character
或者...一个所有位都设置为0的字节,称为空字符,应存在于基本执行字符集中;它用于终止一个字符字符串。
3 值为0的整数常量表达式,或将这样的表达式强制转换为void *类型,称为空指针常量。如果将空指针常量转换为指针类型,则得到的指针称为空指针,保证与任何对象或函数的指针比较不相等。
0
、NULL
、'\0'
和L'\0'
有所不同:sizeof(NULL)
与sizeof(void*)
相同,通常为8
。
sizeof(0)
与sizeof(int)
相同,在普通的64位Intel系统上仍然是4
。sizeof('\0')
也与sizeof(int)
相同,但在C++中,它与sizeof(char)
相同,其定义为1
,很可能与sizeof(int)
不同。
sizeof(L'\0')
与sizeof(wchar_t)
相同,这是实现定义的。sizeof(L'\0') < sizeof('\0')
。char
和int
的大小永远不会相同,因为char
始终是1个字节,而int
至少是2个字节。 - Olichar
和int
,但即使在sizeof(int) == 1
的系统上,int
和char
在C
中也是不同的类型,那么为什么要有这个额外的限制呢? - chqrlie
NUL
。 - Bilow