科学

Null

计算机中表示空值的概念

中文名: 外文名: 适用领域: 所属学科: 名称:Null 本 意:空的 计算机表示:空值
Null介绍
在计算机中通常表示空值,无结果,或是空集合。

指针

Null是一特殊指标值(或是一种对象引用)表示这个指标并不指向任何的对象。这样的指标称之为Null指标。有许多实现上是以0(全位为0)代表null指标,多数的CPU以此作为内存空间的底(虽有些系统会使用有符号位址空间(signedaddressspace),并允许为负值)。一旦用null来存取其记亿体,许多操作系统会发生意外事件。一些语言使用其他的命名方式来表示这种指标,如Pascal,Ruby以及Lua则使用nil,而VisualBasic使用Nothing。Fortran不支援此一常数,但其属性(property)可被设定成NULLIFY并由ASSOCIATED函数测试之。

在C语言的头文件stddefh中,NULL的定义如下:

#ifndefNULL

#ifdef__cplusplus

#defineNULL0

#else

#defineNULL((void*)0)

#endif

#endif

#interfaceNULL0

可见,NULL指针是一个无类型指针,并且值为0。一个指针,拥有2个属性——地址值和指针类型。两者的作用是:

1、地址值标识变量的首地址(32位系统下指针的地址值占4字节)。

2、指针类型告诉编译器,应该怎样进行接下来的数据访问(int型数组和float型数组是不同的;数组访问与结构体访问也是不同的;等等)。

NULL的出现是一种约定俗成,事实上它不是C语言中的关键字;把一个指针赋值为NULL,通常的说法是“将指针悬空”。这样,指针就无法再进行任何数据访问了。编程工作中有一类比较容易犯的错误——指针地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。

前面说到“NULL指针无法再进行任何数据访问”,其实是视编译器功能而定的。0位置指向的是程序起始,对于不同的编译器,NULL指针的操作结果是不同的:有些是不准读写,有些是只读,甚至读写都允许。编译器是人定的。引用网友win_hate在话题“关于NULL的不严谨”中的话来说:“如果说有谁不严谨了,那必定是读取0位置的程序员,而不是C。C的设计哲学之一是:‘程序员知道自己在干什么——没有安全带’”。

疑惑

NULL与0有着扯不断理还乱的关系,其实不那么高深。0本身有着一些原生的特性诸如:起始,没有,正负的分界线,0/1中的0还可以表示否定。NULL正需要这些特性中的一部分。只需要清楚NULL的本质,并在合理的地方才加以利用而非滥用。

PHP

1、特殊的NULL值表示一个变量没有值。NULL类型唯一可能的值就是NULL。

注:NULL类型是php4引进的。

2、在下列情况下一个变量被认为是NULL:

被赋值为NULL。

尚未被赋值。

被unset()。

数据库

Null在数据库中表示不知道的数据,主要有3种意思:

1、知道数据存在,但不知道具体值。

2、不知道数据是否存在。

3、数据不存在。

JAVA

java中的null是一个关键字,通常用来声明一个空引用。

Objecto=null

表示o对象是一个空引用,如果程序员对它进行了引用,就会抛出一个Null Pointer Exception异常。

函数

函数null用来求解零空间,即满足方程组A*X=0的解空间。实际上是求出解空间的一组解(基础解系)。

语法:z=null(A)%z的列向量为方程组的正交规范基,满足z‘xz=I。

z=null(A,'r')%z的列向量是方程A*X=0的有理基。

Null modem

C++

在C++中NULL直接定义为0,而在C里,NULL是定义为(void*)0的,这也很好理解,C语言可以隐式转换,而C++却是需要显示的写出类型转换的。于是在C++中,就干脆直接将NULL定义为0。

相关资讯
内容声明

1、本网站为开放性注册平台,以上所有展示信息均由会员自行提供,内容的真实性、准确性和合法性均由发布会员负责,本网站对此不承担任何法律责任。

2、网站信息如涉嫌违反相关法律规定或侵权,请发邮件至599385753@qq.com删除。

Copyright © 趣爱秀