0:int型,表示数字0,ASCII码值为0;
’\0’:char型,表示一个字符串结束的标志,不会显示,也不会单独存在,ASCII码值为0;
null:表示空,一般代表0地址,ASCII码值为0 ;
’0’:char类型,表示字符的内容为0,ASCII码值为48。
从内存的角度看它们的区别:
在计算机内存中,0、’\0’、null是一样的,值都是0。以数字的方式读取就是0,以字符的方式读取就是’\0’,以某些其他方式读取就是null(比如指针,null的定义跟编译器有关,有的编译器定义null可能不是0);而’0’在内存中的值是48,以字符读取就是’0’,以数字读取就是48。
c语言中的NULL:
c语言中NULL的本质是0,但是这个0不是当一个数字来解析,而是当一个内存地址来解析的,这个0其实是0x00000000,代表内存的0地址。
我们经常会定义 int *p = NULL 来初始化防止野指针,但是为什么要让一个野指针指向内存0地址处呢?
主要是因为在大部分的CPU中,内存的0地址处都不是可以随便访问的,一般都是操作系统严密管控区域,所以应用程序不能随便访问,所以野指针指向了这个区域可以保证野指针不会造成误伤,如果程序无意识地解引用,指向0地址处的野指针则会出发段错误,这样就可以提示你找出程序中的错误。
一般比较一个指针和NULL是否相等不要写成 if ( p ==NULL),而写成 if ( NULL == p ),原因是第一种写法中如果不小心把双等号 == 写成单等号 = ,则编译器不会报错,但是程序的意思完全不一样了;而第二种写法如果不小心把双等号 == 写成了单等号 = ,则编译器会发现并报错。