C语言编程学习空指针NULL详解 您所在的位置:网站首页 python有空指针吗 C语言编程学习空指针NULL详解

C语言编程学习空指针NULL详解

2023-04-09 15:42| 来源: 网络整理| 查看: 265

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

空指针NULL:

在C语言中,如果一个指针不指向任何数据,我们就称之为空指针,用NULL表示。例如:

NULL 是一个宏定义,在stdio.h被定义为:

那么我们来看看什么是空指针?

[6.3.2.3-3] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.

因此,如果 a 是一个指针变量,则 a = 0;、a = 0L;、a = '\0';、a = 3 - 3;、a = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;), p 都成为一个空指针,由系统保证空指针不指向任何实际的对象或者函数。反过来说,任何对象或者函数的地址都不可能是空指针。(tyc: 比如这里的(void*)0就是一个空指针。把它理解为null pointer还是null pointer constant会有微秒的不同,当然也不是紧要了

那么什么是NULL??

[6.3.2.3-Footnote] The macro NULL is defined in (and other headers) as a null pointer constant

即 NULL 是一个标准规定的宏定义,用来表示空指针常量。因此可以用 a = NULL; 来使 a 成为一个空指针。(tyc:很多系统中的实现:#define NULL (void*)0,与这里的“a null pointer constant”并不是完全一致的)。如果包含了相应的标准头文件而引入了 NULL 的话,则再在程序中重新定义 NULL 为不同的内容是非法的,其行为是未定义的。也就是说,如果是符合标准的程序,其 NULL 的值只能是 0,不可能是除 0 之外的其它值,比如 1、2、3 等。

根据下面这行代码我们来理解一下空指针NULL:

根据宏定义我们知道:

(void *)0表示把数值 0 强制转换为void *类型,最外层的( )把宏定义的内容括起来,我们自己进行宏定义时也推荐这么做,防止发生歧义,所以最后运行结果为0。

那么你现在是否会想NULL和0是等价的呢??

答案肯定是否定的,我们都知道变量定义系统就会给他分配内存空间,指针变量也是如此,如果指针没有指向的话那么地址就是随机值。

例如:

这个指针的地址是一个随机值,如果不小心用的话就会导致数据错误,从而使程序退出。

NULL 使 p 指向地址 0。大多数系统中都将 0 作为不被使用的地址,所以运用 p 也不会毁坏数据。但并非总是如此,也有系统会使用地址 0,而将 NULL 定义为其他值,所以不要把 NULL 和 0 等同起来。

指针变量 p 是空指针的判断:

if ( p == 0 )

if ( p == '\0' )

if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */stdio.h

if ( NULL == p )

if ( !p )

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

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