0x0:仅仅是数字0,%d输出
0 :经常表示数字0
null :不可识别的字符串,识别不了
NULL : 经常表示空指针,未分配内存,也可以是数据库里面存的NULL值。
指针变量 p 是空指针的判断:
if ( p == 0 )
if ( p == '\0' )
if ( p == 3 - 3 )
if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */
if ( NULL == p )
if ( !p )
if ( p == q )
...
指针变量 p 不是空指针的判断:
if ( p != 0 )
if ( p != '\0' )
if ( p != 3 - 3 )
if ( p != NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */
if ( NULL != p )
if ( p )
if ( p != q )
\0 :非法转义字符,识别不了
‘\0’ : 字符串结束标记。
'0' :字符0,ASCII码48
"0" :字符串0,几乎没有什么作用
"" :空字符串,分配了内存,分配了一个空间
" " :含有空格的字符串,几乎不用。长度为一字节,但占用2字节空间。内存为"空格\0"
'' :空字符常量,有的编译器无法输出。有的输出%c空格,%d输出0,空字符码值是0
' ':含有空格的字符常量,%c输出空格,%d输出空格的ASCII码32
注意:
1.0 NULL ‘\0’ 其实是一样的东西都代表ASCII第一个元素。
%c 输出时,不同编译器显示不同,显示空;%d输出为0。但是它们的实质并不相同,NULL用于指针和对象,0是指数值,‘\0’用于字符串的结束。
在不同的系统中,NULL并非总是和0等同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将0作为不被使用的地址,所以就有了类似这样的定义:#define NULL 0 。 但并非总是如此,也有些系统不将0地址作为NULL,而是用其他的地址,所以说,千万别将NULL和0等价起来,特别是在一些跨平台的代码中,这更是将给你带来灾难。
int *p=NULL; int *p='\0'; int *p=0;
2.字符永远只有一个字节,字符串切记 以 ‘\0’ 结束,字符串长度不包括 ‘\0’ 这个结束标志。如字符串 “pretty”长度为6字节,但占用内存 7字节。
3.空指针常量?
(一个表示0值的 整数常量,叫做空指针常量)
解释: 0、0L 、3 - 3(它们都是“integer constant expression”整数常量 表达式 )以及 (void*)0 等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择 0L);