NULL, '',0 '0'的区别

1、NULL;

NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内容那个:

#if !defined(NULL)&&defined(__NEEDS_NULL)

#ifdef __cplusplus

#define NULL 0

#else

#define NULL ((void *)0)

#endif

#endif

NULL 在c中用(void*)0表示,在c++中用0表示。

2、''

''表示字符串结束,它在ASCII中的值为0(数值0,非字符‘0’)

所以在数值上NULL,'',0是一样的,都是0.

但'0'就不同了,在ASCII码中编码为48,所以字符0和上述三个值不同。

在内存中NULL 和'' 和'0'都是一个8位的char类型,NULL 和'' 值一样,都是0,以数字方式读取就是0,以字符串读取时就是''或者null(和编译器有关),而‘0’在内存存储着48,以字符读取就是'0',以 数字读取就是48,至于0,可能是char ,int,float,double等类型,但是值和NULL和''一样,都是0.

printf("%d",'0');==>48

printf("%c",'0');==>0

printf("%c",0);==>空(即NULL)

printf("%d",0);==>0

 

那么0+'0',0+''分别是什么呢?

printf("%c",0+'');==>空(NULL) 先转换成int,然后ASCII编码相加为0,%c输出,转换成char,所以输出NULL

printf("%d",0+'');==>0                 先转换成int,然后ASCII编码相加为0,%d输出,不用转换,输出数字0

 

printf("%c",0+'0');==>0

printf("%d",0+'0');==>48

 
3.'0'
'0'的意思就是字符0,ASCII码是48,  '0' 跟'a' '#'的意思一样。可以用来将字符串形式存储的数字(如4251)一个一个转化成数字,原理就是字符'4''2''5''1'跟'0'在ASCII中的值得差就是4、5、2、1.
 
字符里面的数字0
char a = ‘0’;//a这个字符里面装的就是0
当我们要把一个字符格式的数字转化为整型数字时,可以这样用:
char a = '7';
int b = a - '0';//b = 7
同理, 数字加‘0’可转化为字符
原文地址:https://www.cnblogs.com/try-again/p/4976845.html