c语言中的null是大写,C语言空指针NULL以及void指针

本文详细介绍了C语言中的空指针NULL,NULL是一个宏定义,通常表示不指向任何数据的指针,用于避免未初始化的指针引发的问题。NULL不同于0和void指针,它是一个特殊的标识,确保不会误操作内存。同时,文章强调了NULL和NUL的区别,以及void指针的使用场景。
摘要由CSDN通过智能技术生成

空指针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 指针实实在在地指向一块内存,只是不知道这块内存中是什么类型的数据。

原文:http://blog.csdn.net/shuimanting520/article/details/51360139

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值