C语言空指针NULL以及void指针
程序员文章站
2022-03-26 09:27:31
空指针null
在c语言中,如果一个指针不指向任何数据,我们就称之为空指针,用null表示。例如:
int *p = null;
注意区分大小写,null 没有任何特殊含义,只是一个普通的标识符...
空指针null
在c语言中,如果一个指针不指向任何数据,我们就称之为空指针,用null
表示。例如:
int *p = null;
注意区分大小写,null 没有任何特殊含义,只是一个普通的标识符。null 是一个宏定义,在
stdio.h
被定义为:
#define null ((void *)0)
(void
*)0
表示把数值 0 强制转换为void
*
类型,最外层的(
)
把宏定义的内容括起来,我们自己进行宏定义时也推荐这么做,防止发生歧义。总之,p 的值为 0。你可以输出 p 的值:
#include int main(){ int *p = null; printf("%d\n", p); return 0;}
运行结果:
0
我们知道,变量一旦定义就要分配内存,指针变量也是如此。例如:
int *p; //它不是空指针它的值是随机的,是垃圾值,如果不小心使用了它,运行时一般会引起段错误,导致程序退出,甚至会不知不觉地修改数据。
p 经过定义,就一定在内存中分配了4个字节(32位环境)的空间,只是它的值是随机的,不像
int
会被初始化为
0,但是它确实指向了一段正常使用的内存。使用 p 时,操作的就是这段内存的数据,幸运的话能够正常运行,不过大部分情况下这段内存是无权操作的。null 使 p 指向地址 0。大多数中都将 0 作为不被使用的地址,所以吴用 p 也不会毁坏数据。
但并非总是如此,也有系统会使用地址 0,而将 null 定义为其他值,所以不要把 null 和 0 等同起来,下面的写法也是不专业的:
int *p = 0;而应该坚持写为:
int *p = null;
注意 null 和 nul 的区别:null表示空指针,是一个宏定义,可以在代码中直接使用。而 nul 表示字符 '\0',也就是字符串结束标志,它是ascii码表中的第 0 个字符。nul 没有在c语言中定义,仅仅是对 '\0' 的称呼,不能在代码中直接使用。
void 指针
c语言还有一种void
指针类型,即可以定义一个指针变量,但不说明它指向哪一种类型数据。例如:
void *p = malloc(2);在内存中分配2个字节的空间,但不确定它保存什么类型的数据。
注意,void 指针与空指针 null 不同:null 说明指针不指向任何数据,是“空的”;而 void 指针实实在在地指向一块内存,只是不知道这块内存中是什么类型的数据。
推荐阅读
-
C/C++语言void及void指针深层探索 .
-
C语言 malloc calloc realloc 区别以及工作模式 && 预防野指针
-
C语言学习之指针类型_空指针_二级指针_指针运算_指针与数组实例讲解
-
C语言空指针NULL以及void指针
-
C语言的空类型指针,空指针,野指针详解
-
关于C语言中:初始化指向NULL的指针作为参数报错问题---原因是指向NULL 的指针没有指向具体的地址空间
-
C/C++语言void及void指针深层探索 .
-
C语言 二叉树 统计二叉树中度为0,1和2的结点个数【树和二叉树】给定先序序列,按照该序列创建对应的二叉树,并输出该二叉树度为0,1和2的结点个数。输入:一行,二叉树按先序遍历序列,空指针用字符^占位
-
C 语言初级 函数与指针 以及结构体的介绍
-
C语言 malloc calloc realloc 区别以及工作模式 && 预防野指针