在C语言中
NULL
和0
的值都是一样的,但是为了使得目的和用途及容易识别,NULL
用于指针和对象,0
用于数值对于字符串的结尾,使用\0
,它的值也是0
,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值
在不同的系统中
NULL
并非总是和0
等同,NULL
仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将0
作为不被使用的地址,所以就有了类似这样的定义
#define NULL 0
但并非总是如此,也有些系统不将0
地址作为NULL
,而是用其他的地址,所以说,千万别将NULL
和0
等价起来,特别是在一些跨平台的代码中,这更是将给你带来灾难。
code by C
int main()
{
int *p=NULL;
printf("%s",p);
return 0;
}
单步调试可以看出执行int *p=NULL
,p
的值为0x00000000
,可以看出,NULL
在实际底层调用中就是0
。