再论c语言里面的void类型本质和NULL
#include <stdlib.h>
void *malloc(size_t size);
#ifdef _cplusplus // 条件编译
#define NULL 0
#else
#define NULL (void *)0 // 这里对应C语言的情况
#endif
(1)int *p; p是一个函数内的局部变量,则p的值是随机的,也就是说p是一个野指针。
(2)第二个作用就是一个特殊标记。按照标准的指针使用步骤是:
int *p = NULL; // 定义p时立即初始化为NULL
p = xx;
if (NULL != p)
{
*p // 在确认p不等于NULL的情况下才去解引用p
}
p = NULL
注意:一般比较一个指针和NULL是否相等不写成if (p == NULL),而写成if (NULL == p)。原因是第一种写法中如果不小心把==写成了=,则编译器不会报错,但是程序的意思完全不一样了;而第二种写法如果不小心把==写成了=则编译器会发现并报错。
(2)'\0'是一个转义字符,他对应的ASCII编码值是0,本质就是0。
(3)'0'是一个字符,他对应的ASCII编码值是48,本质是48。
(4)0是一个数字,他就是0,本质就是0。
(4)NULL是一个表达式,是强制类型转换为void *类型的0,本质是0.
总结:'\0'用法是C语言字符串的结尾标志,一般用来比较字符串中的字符以判断字符串有没有到头;'0'是字符0,对应0这个字符的ASCII编码,一般用来获取0的ASCII码值;0是数字,一般用来比较一个int类型的数字是否等于0;NULL是一个表达式,一般用来比较指针是否是一个野指针。