NUL和NULL有什么区别?

3

NULL 是在 <stddef.h> 中定义的一个宏,用于表示 null 指针;它可以被定义为 ((void*)0)。而 NULL 则是 ASCII 字符集中第一个字符的名称。它们之间有什么区别呢?


3
你有什么问题? - chqrlie
回答前请参考此链接 - Sourav Ghosh
2
为什么它被标记为重复?也许问题写得很糟糕,但这不是重复。另一个线程的标题中没有 NUL - Bilow
3个回答

8

NULL和NUL代表的是相同的概念:它们都表示值的缺失。唯一的区别是-就像你所说的-NULL是一个宏,而NUL是给第一个ASCII字符命名的名称。您可能会遇到称为NUL的宏的唯一场景是这样的:

#define NUL '\0'

2
如果你这样做,它可能会像这样:#define NUL '\0' - chqrlie
@chqrlie:好的观点。已经做出了适当的更改。 - Levi

2

C标准中不存在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
请注意,0NULL'\0'L'\0'有所不同:
在64位Intel系统上,sizeof(NULL)sizeof(void*)相同,通常为8sizeof(0)sizeof(int)相同,在普通的64位Intel系统上仍然是4
在C中,sizeof('\0')也与sizeof(int)相同,但在C++中,它与sizeof(char)相同,其定义为1,很可能与sizeof(int)不同。 sizeof(L'\0')sizeof(wchar_t)相同,这是实现定义的。
令人惊讶的是,在C中,您可能会发现sizeof(L'\0') < sizeof('\0')

在C++中,charint的大小永远不会相同,因为char始终是1个字节,而int至少是2个字节。 - Oli
这是有道理的,因为C++必须能够区分charint,但即使在sizeof(int) == 1的系统上,intcharC中也是不同的类型,那么为什么要有这个额外的限制呢? - chqrlie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接