正确使用空(null)指针 您所在的位置:网站首页 java空指针判断 正确使用空(null)指针

正确使用空(null)指针

2024-03-16 09:57| 来源: 网络整理| 查看: 265

C语言中null很有趣,null指针值是NULL , NULL可能是0,0L 或 (void*)0 ,有时候很容易迷惑。null指针对于很多数据结构的实现来说都是很有用的特性,比如链表经常用null指针来表示链表结尾。下面对null指针进行讲解。

null概念是什么

null概念是通过null指针常量表示来支持一种抽象。这个常量可能是也可能不是常量0,C程序员不需要关心实际的内部表示。

NUL 是什么

NUL 是ASCII 字符集中 ‘\0’ 字符的名字,它的字节模式为全 0。NULL 指一个其值为 0 的指针。它们都是整型值,其值也相同,所以它们可以互换使用。

NULL宏是什么

NULL宏是强制类型转换为void指针的整数常量0,在很多库文件中都可以找到,包括stdio.h、stdblib.h、stddef.h,在这些库中定义如下:

在这里插入图片描述 如果我们把null赋值给pi,我们可以写如下代码:

int *pi = NULL;

上面都说了,null指针值是NULL , NULL可能是0,0L 或 (void*)0 ,我们可以给指针赋0,但是不能给pi赋任何别的整数值

语法正确:

int *pi = 0; int *pi = NULL;

语法错误:

int * pi = 100; int num = 5; int *pi = num;

关于C中指针为空的判断

指针可以作为逻辑表达式的唯一操作数。判断指针为空,我们可以这样设置 (一)

if(ptr) /* 如果 p 非空,则完成 */ { //不是NULL } if(!ptr) /* 如果 p 为空,则完成 */ { //是NULL }

有时候我们看公司前辈的代码,还看见这样判断指针为空方式是: (二)

if( NULL == ptr) { ... } if(NULL != ptr) { ... }

上面(二)表达式都有效,但是冗余。这样可以更清晰,但是没必要显式地跟NULL做比较。ptr被赋了NULL值,那就会被解释为二进制0。

这里要说一下,任何时候不要对null指针解引用,因为它并不包含合法地址。执行这样的代码会导致程序停止。

到底用不用NULL

使用指针时哪一种形式更好,是NULL呢,还是0呢?无论哪一种都完全没有问题,选择哪一种只是个人爱好。

有些开发者喜欢用NULL,因为这样会提醒自己是在用指针。另一一些人则觉得没必要,因为NULL其实就是0。

0的含义随着上下文的变化而变化,有时候可能是整数0,有时候又可能是null指针,看看这个例子:

int num; int *ptr = 0; //这里的0表示null的指针NULL pi = # *pi = 0; //这里的0表示整数0

void指针

void指针是通用指针,用来存放任何数据类型的引用。例如:

void *vp

它有如下的特性:

1、任何指针都可以赋值给void指针

int num; int *pi = # void *pv = pi; //任何指针都可以赋值给void指针 pi = (int *) pv; //void指针赋值给其他类型的指针时都要进行转换

这里要注意一下:void指针只用做数据指针,而不能用做函数指针。void指针不能复引用 ,还有void指针不能参与指针运算,除非进行转换 。

总结

null指针和未初始化的指针不同。未初始化的指针可能包含任何值,而包含NULL的指针则不会内存中的任何地址。

null指针值是NULL , NULL可能是0,0L 或 (void*)0 表示。选择NULL还是0?这个就看这个人喜好了,选择NULL会提醒自己是在使用指针。如果你是C++开发中可以使用nullptr(c++ 11)表示空指针。

在这里插入图片描述

欢迎关注微信公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有