NULL, nil, Nil详解
原文地址:http://blog.csdn.net/wzzvictory/article/details/18413519 感谢原作者
作者:wangzz
一、NULL
1、声明位置
2、定义
- #undef NULL
- #ifdef __cplusplus
- # if !defined(__MINGW32__) && !defined(_MSC_VER)
- # define NULL __null
- # else
- # define NULL 0
- # endif
- #else
- # define NULL ((void*)0)
- #endif
- # define NULL ((void*)0)
因此,NULL本质上是:(void*)0
3、用处及含义
4、示例
- charchar *string = NULL;
二、nil
1、声明位置
2、定义
- #ifndef nil
- # if __has_feature(cxx_nullptr)
- # define nil nullptr
- # else
- # define nil __DARWIN_NULL
- # endif
- #endif
- # define nil __DARWIN_NULL
就是说nil最终是__DARWIN_NULL的宏定义,__DARWIN_NULL是定义在_types.h中的宏,其定义形式如下:
- #ifdef __cplusplus
- #ifdef __GNUG__
- #define __DARWIN_NULL __null
- #else /* ! __GNUG__ */
- #ifdef __LP64__
- #define __DARWIN_NULL (0L)
- #else /* !__LP64__ */
- #define __DARWIN_NULL 0
- #endif /* __LP64__ */
- #endif /* __GNUG__ */
- #else /* ! __cplusplus */
- #define __DARWIN_NULL ((void *)0)
- #endif /* __cplusplus */
非C++代码的__DARWIN_NULL最终定义形式如下:
- #define __DARWIN_NULL ((void *)0)
也就是说,nil本质上是:(void *)0
3、用处及含义
4、示例
- NSString *string = nil;
- id anyObject = nil;
三、Nil
1、声明位置
2、定义
- #ifndef Nil
- # if __has_feature(cxx_nullptr)
- # define Nil nullptr
- # else
- # define Nil __DARWIN_NULL
- # endif
- #endif
3、用处及含义
4、示例
- Class anyClass = Nil;
四、NSNull
1、声明位置
2、定义
- @interface NSNull : NSObject <NSCopying, NSSecureCoding>
- + (NSNull *)null;
- @end
3、用处及含义
4、示例
我们通常初始化NSArray对象的形式如下:
当NSArray里遇到nil时,就说明这个数组对象的元素截止了,即NSArray只关注nil之前的对象,nil之后的对象会被抛弃。比如下面的写法:
- NSArray *arr = [NSArray arrayWithObjects:@"wang",@"zz",nil,@"foogry"];
这是NSArray中只会保存wang和zz两个字符串,foogry字符串会被抛弃。
- NSArray *arr = [NSArray arrayWithObjects:@"wang",@"zz",[NSNull null],@"foogry"];
五、总结
从前面的介绍可以看出,不管是NULL、nil还是Nil,它们本质上都是一样的,都是(void *)0,只是写法不同。这样做的意义是为了区分不同的数据类型,比如你一看到用到了NULL就知道这是个C指针,看到nil就知道这是个Objective-C对象,看到Nil就知道这是个Class类型的数据。
NULL, nil, Nil详解的更多相关文章
- Shell脚本 /dev/null 2>&1详解
Shell脚本---- /dev/null 2>&1详解 1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. ...
- iOS中nil、Nil、NULL、NSNull详解(转)
ObjC 里面的几个空值符号经常会差点把我搞死,这些基础的东西一点要弄清楚才行,以提高码农的基本素质. nil nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interfa ...
- iOS中nil、Nil、NULL、NSNull详解
nil nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interface 声明的 ObjC 对象. 例如: NSString *someString = nil; NSUR ...
- ECMAScript---布尔类型、null、undefined详解
布尔类型中 至只有 true和false 在开发中它是非常重要的两个值,尤其是在条件判断中 如何把其他类型转换为布尔类型? 1.Boolean() Boolean(1); //true Boolean ...
- 关于Java中null的十点详解
对于每一个Java程序员来说,null肯定是一个让人头痛的东西,连Java的发明者都承认这是一项巨大的设计失误,今天就来总结一下Java中关于null的知识. 1.null不属于任何类型,可以被转换成 ...
- 【Linux】/dev/null 2>&1 详解
今天一个朋友突然在自己的维护的Linux中, /var/spool/cron/root 中看到了以下的内容: 30 19 * * * /usr/bin/**dcon.sh > /dev/nul ...
- Shell脚本———— /dev/null 2>&1详解
1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和 ...
- shell之“>/dev/null 2>&1” 详解(转)
今天在自己的一个技术群中又被问道了这么一个问题,于是又通俗的解释了一下,做个记录,大家看看解释是否清楚! shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以 ...
- /dev/null 2>&1 详解
今天一个朋友突然在自己的维护的Linux中, /var/spool/cron/root 中看到了以下的内容: 30 19 * * * /usr/bin/**dcon.sh > /dev/nul ...
- shell里的/dev/null 2>&1详解
shell中可能经常能看到: >/dev/null 2>&1 命令意思是:标准输出stdout 和标准错误输出stderr 也重定向到空设备文件,即不显示输出信息 分解这个组合:“ ...
随机推荐
- DTrace patch for Python 2.7.x and 3.x
DTrace patch for Python 2.7.x and 3.x Última Actualización: 21 de septiembre de 2015 https://www.jce ...
- iOS开发经验总结(上)
在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPhone Size 手机型号 屏幕尺寸 iPhone 4 4s 320 * 480 iPhone 5 5s ...
- 谓词(NSPredicate)
OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤 ...
- mysql脚本mysql_safe解释、mysql.sock文件、mysql_install_db
1.首先解释下,启动mysql时为何会调用mysql_safe脚本来启动mysql [root@localhost ~]# /etc/init.d/mysqld start 正在启动 mysqld: ...
- 深入理解计算机系统第二版习题解答CSAPP 2.8
给出位微量的布尔去处的求值结果. 运算 结果 a 0110 1001 b 0101 0101 ~a 1001 0110 ~b 1010 1010 a&b 0100 0001 a ...
- c语言,strcspn,在串中查找第一个给定字符集内容的段
函数名: strcspn 功 能: 在串中查找第一个给定字符集内容的段 用 法: int strcspn(char *str1, char *str2); 程序例: #include <stdi ...
- zTree判断是否为父节点
var treeObj = $.fn.zTree.getZTreeObj("tree"); var nodes = treeObj.getSelectedNodes(); if(t ...
- 【转】Android 应用测试总结
前提所有的功能分支已完成 启动:1. 启动入口:桌面正常启动,最近运行启动,所有程序列表中启动,锁屏快捷启动2. 其他入口:从其他程序开启应用,从外部以文件形式打开应用(如果有)3. 退回:从其他程序 ...
- euqals和hashcode
hashcode这个方法是用来鉴定2个对象是否相等的. 那你会说,不是还有equals这个方法吗? 不错,这2个方法都是用来判断2个对象是否相等的.但是他们是有区别的. 一般来讲,equals这个方法 ...
- ABI Management
官方文档:https://developer.android.com/ndk/guides/abis.html?hl=is 关于支持指令集,在上表官方文档都表达清楚了.我们认为避免多个指令集浪费资源. ...