标签:
NULL
表示。例如:
int *p = NULL;
注意区分大小写,null 没有任何特殊含义,只是一个普通的标识符。NULL 是一个宏定义,在
stdio.h
被定义为:
#define NULL ((void *)0)
(void
*)0
表示把数值 0 强制转换为void
*
类型,最外层的(
)
把宏定义的内容括起来,我们自己进行宏定义时也推荐这么做,防止发生歧义。
- #include <stdio.h>
- int main(){
- int *p = NULL;
- printf("%d\n", p);
- return 0;
- }
int *p; //它不是空指针它的值是随机的,是垃圾值,如果不小心使用了它,运行时一般会引起段错误,导致程序退出,甚至会不知不觉地修改数据。
int
会被初始化为
0,但是它确实指向了一段正常使用的内存。使用 p 时,操作的就是这段内存的数据,幸运的话能够正常运行,不过大部分情况下这段内存是无权操作的。int *p = 0;而应该坚持写为:
int *p = NULL;
注意 NULL 和 NUL 的区别:NULL表示空指针,是一个宏定义,可以在代码中直接使用。而 NUL 表示字符 ‘\0‘,也就是字符串结束标志,它是ASCII码表中的第 0 个字符。NUL 没有在C语言中定义,仅仅是对 ‘\0‘ 的称呼,不能在代码中直接使用。
void
指针类型,即可以定义一个指针变量,但不说明它指向哪一种类型数据。例如:
void *p = malloc(2);在内存中分配2个字节的空间,但不确定它保存什么类型的数据。
注意,void 指针与空指针 NULL 不同:NULL 说明指针不指向任何数据,是“空的”;而 void 指针实实在在地指向一块内存,只是不知道这块内存中是什么类型的数据。
标签:
原文地址:http://blog.csdn.net/shuimanting520/article/details/51360139