NULL 与 C 中的 0 有何不同?
How is NULL different from 0 in C?
如果这 3 行是 stdio.h 中唯一一次提到 NULL,那么 NULL 与 0 有何不同,最重要的是什么告诉编译器 NULL 实际上是一个无效地址?
说到 C,可能在其他库中,比如在 iostream 中,NULL 的定义不同。
0085 #ifndef NULL
0086 #define NULL 0
0087 #endif
对于编译器来说,NULL
在用作指针时与 0
无法区分。标准实际上将 0
定义为空指针值,标准库只是引入了一个方便的宏 NULL
定义为空指针值(通常为 0
或 ((void*)0)
) , 这样您就可以在代码中使用它以提高可读性和表达意图。但是 NULL
本身并没有什么特别之处;相关的是 0
。
对于编译器来说,0
、NULL
和 '[=12=]'
都映射到相同的值。但是,从可读性的角度来看,您可能希望根据上下文使用适当的值,以明确您要执行的操作并提高代码审计和审查的效率。
如果这 3 行是 stdio.h 中唯一一次提到 NULL,那么 NULL 与 0 有何不同,最重要的是什么告诉编译器 NULL 实际上是一个无效地址? 说到 C,可能在其他库中,比如在 iostream 中,NULL 的定义不同。
0085 #ifndef NULL
0086 #define NULL 0
0087 #endif
对于编译器来说,NULL
在用作指针时与 0
无法区分。标准实际上将 0
定义为空指针值,标准库只是引入了一个方便的宏 NULL
定义为空指针值(通常为 0
或 ((void*)0)
) , 这样您就可以在代码中使用它以提高可读性和表达意图。但是 NULL
本身并没有什么特别之处;相关的是 0
。
对于编译器来说,0
、NULL
和 '[=12=]'
都映射到相同的值。但是,从可读性的角度来看,您可能希望根据上下文使用适当的值,以明确您要执行的操作并提高代码审计和审查的效率。