C语言编程学习空指针NULL详解
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 <stddef.h> (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 ) <—————(这里和下面的if(p)都被专门说过一次,null定义不肯定是0.这里假如贸然使用!p会很危险的.上面也专门解释了这种写法的危险性,所以这种写法不能被提倡)
指针变量 p 不是空指针的判断:
if ( p != 0 )
if ( p != ‘\0’ )
if ( p != NULL ) /* 使用 NULL 必需包含相应的标准库的头文件 */stdio.h
if ( NULL != p )
if ( p != q )
假如大家对C语言感兴趣,可以关注小编

这些是C/C++能做的
服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像解决、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » C语言编程学习空指针NULL详解