NULL,nil,Nil,NSNull 傻傻分不清楚

1. 一图胜千言

name value 含义
NULL (void *)0 C 指针的字面空值(在指针环境中就是0),OC 中和 nil 一模一样
nil (id)0 OC中的对象的字面空值,可以用 nil 来调用方法而不会崩溃
Nil (Class)0 OC 中类的字面空值
NSNull [NSNull null] 一个用来代表空值的单例对象,只有一个方法:+ (NSNull *)null,常用在集合类型中代表空值(例如 NSArray,不允许存放 nil/NULL)

前三者本质上都是(void *)0

2. 扩展:

2.1 void * 的含义

void *就是指 C 语言中的 void 指针。void 指针表示没有特定类型的指针,它可以存储任何类型的地址,并且可以转换为任何类型的指针。

2.2 一些有趣的事实:

  • void *不能被直接取用
    这个例子就直接编译不通过:

    #include 
    int main() 
    { 
        int a = 10; 
        void *ptr = &a; 
        printf("%d", *ptr); 
        return 0; 
    } 
    
    

    输出报错:
    Compiler Error: 'void*' is not a pointer-to-object type

  • 而转换类型后就可以:

    #include 
    int main() 
    { 
        int a = 10; 
        void *ptr = &a; 
        printf("%d", *(int *)ptr); 
        return 0; 
    } 
    

    输出:
    10

参考:

  • 《void pointer in C / C++》
  • 《nil / Nil / NULL / NSNull》-NSHipster

你可能感兴趣的:(NULL,nil,Nil,NSNull 傻傻分不清楚)