前言
记得曾经有不少朋友问过笔者,在Objective-C
中nil
和Nil
以及NULL
的区别。最重要的是,在面试中还有不少朋友常会被问到。记得当年刚找工作的时候,笔者就被面试官问到过,现在笔者在这里统一详细说明。
NULL
对于学习过C/C++
语言的朋友,对NULL
一定很熟悉吧?这就是在C/C++
中的空指针。
在C
语言中,NULL
是无类型的,只是一个宏,它代表空。我们不研究C++
中的NULL
,因为在C++11
以后又有了新的定义,我们不深究。
这就是C
语言中所谓的NULL
(C++
的定义比较复杂,这里不说了):
#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
# if !defined(__MINGW32__) && !defined(_MSC_VER)
# define NULL __null
# else
# define NULL 0
# endif
#else
# define NULL ((void*)0)
#endif
这是在stddef.h
头文件中声明的。这是使用了条件编译的,__cplusplus
这个宏表示C++
,对于我们Objective-C
开发来说,NULL
就表示((void*)0)
像C</