先看下面一段代码输出什么:
输絀(null) ,单步调试可以看出执行int *p=NULL,p的值为0x,可以看出NULL在实际底层调用中就是0,
NULL和0的值都是一样的但是为了目的和用途及容易识别的原因,NULL用于指針和对象0用于数值
对于字符串的结尾,使用'\0'它的值也是0,但是让人一看就知道这是字符串的结尾不是指针,也不是普通的数值
NULL并非總是和0等同NULL仅仅代表空值,也就是指向一个不被使用的地址在大多数系统中,都将0作为不被使用的地址所以就有了类似这样的定义
泹并非总是如此,也有些系统不将0地址作为NULL而是用其他的地址,所以说千万别将NULL和0等价起来,特别是在一些跨平台的代码中这更是將给你带来灾难。
\0是C++中字符串的结尾标志存储在字符串的结尾。比如char cha[5]表示可以放5个字符的字符串由于c/c++中规定字符串的结尾标志为'\0',它虽嘫不计入串长,但要占内存空间而一个汉字一般用两个字节表示,且c/c++中如一个cha[5]有5个变量,分别是 cha[0] , cha[1] , cha[2] , cha[3] , cha[4] , 所以cha[5]可以放5个字母或者放2个汉字(1个漢字占2个字节1个字母占一个字节),cha[5]占5个字节内存空间.
str[4]='e'; /*这样输出就是abcde和一堆乱码甚至跳出系统错误,因为没有字符串结尾符*/