NULL和void*

======================NULL空指针====================

NULL所在位置是头文件stddef.h中(这里说的是c++,如果是c语言,头文件为stdio.h),显示:

#define  NULL  ((void *) 0)

显然,这是一个宏定义。NULL实际上是((void *) 0) , 指向地址0的void *类型指针。

也就是说,空指针是有指向的,但是它指向的地址是特殊的,该地址不允许存放数据并且不允许程序访问,所以空指针不能操作该地址里的内容。

=======================void * 类型的指针============

这个类型的指针指向了实实在在的存放数据的地址,但是该地址存放的数据的数据类型我们暂时是不知道的。

因为我们的动态内存分配就是这个样子的,一开始只是分配内存,但是没有知道这块地址用来存放什么,接着强制类型转换,使得它用来存放我们想要存放的内容。

举例:

char  * str = (char *)malloc(sizeof(char)*18);

代码中malloc()函数分配的地址一开始是void *类型的,因为我们用来存放char类型数据,所以强制转化成char *。

你可能感兴趣的:(NULL和void*)