非常完美吴承璟芷萱:ADSL资费问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 05:38:31
宽带管理界面那里的 计费方式:NULL 什么意思啊?
我知道null在编程里是空的意思 我问在那里是什么意思!!我晕

null 是C语言中的表达式,在书中的简单定义是“与实现相关的空指针常量”

不必深究底层含义,你可以理解成ADSL后台计费程序没有开启,数值型字段为空,并以C语言中的null为符号表现出来

因为ADSL计费方式通常是由电信或网通这样的ISP提供的,因此管理后台的计费功能没有实际用途

晕,就是他们有计费方式这里没写,计费方式大家都知道的,所以这里都没写,可不是免费啊哥们^_^

NULL并不就是0,也不就是(void*)0。

无论C还是C++,NULL都是一个宏,而且都是一个空指针(null pointer),鉴于C90/C99和C++98三者对于这个宏的定义描述基本相同,我只列出C99和C++98的原文:

C99
The macros are NULL which expands to an implementation-defined null pointer constant.

C++98
The macro NULL is an implementation-defined C++ null pointer constant in this international standard.

想理解透什么是NULL,首先就得先了解什么是null pointer。C与C++的null pointer是不同的,在C中,一个具有integer type的0值或者由(void*)强制转换而来的0值都是null pointer;而C++则只能是integer type的0值。

C99
An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant

C++98
A null pointer is an integral constant expression rvalue of integer type that evaluates to zero.

换言之,C中的null pointer具有integer type或者void*类型,而C++的null pointer 只能是integer type。

那么,为什么这三种标准所定义的NULL都是implementation-defined呢?其原因是integer type产生的。各位一看见integer type这个词绝大多数人肯定会联想到指的就是int,错也!其实在标准中,int只是integer type的其中一种,标准中所说的integer type包含signed integer type和unsigned integer type,而signed integer type包含signed char、signed short、signed int、signed long、signed long long(C99);unsigned integer type是上述类型的对应unsigned类型。C99还包含了extend integer type。

因此,null pointer可能具有各种整数类型,在C中还包含(void*),因此NULL宏是implementation-defined的。

C++之父BS在其书《C++ primer》中谈到他喜欢用0而不是用NULL,虽然我在他面前只是一个非常渺小的小人物,但不代表我就应该全盘接受他的观点。我依然认为应该使用NULL而不是用0。

为什么呢,当你在表达式中写下一个0的时候,这个0是一个integer constant expression,跟上述相同的原因,这个0的类型可能有很多种,在不同的系统环境下,integer constant expression的类型不一定就是int,于是这个0就不一定是int。这有可能会产生一些移植性问题。而使用NULL的话,一个标准的编译器,通常会根据不同的环境定义不同的NULL宏,从而能够根据环境自动调整。

NULL 是空的意思 编程序的都知道

null 值指出一个变量中没有包含有效的数据。