background image

  但这并不意味着,void *

也可以无需强制类型转换地赋给其它类型的指针。因为 无类

型 可以包容 有类型 ,而 有类型 则不能包容 无类型 。道理很简单,我们可以说 男人

和女人都是人 ,但不能说 人是男人 或者 人是女人 。下面的语句编译出错:
void *p1;
int *p2;
p2 = p1;

“‘

  提示 =‘ : cannot convert from ‘void *‘ to ‘int *‘”。

3.void 的使用

  下面给出 void 关键字的使用规则:

 

  规则一 如果函数没有返回值,那么应声明为 void 类型

  在 C 语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但
是许多程序员却误以为其为 void 类型。例如:
add ( int a, int b )
{
return a + b;
}
int main(int argc, char* argv[])
{
printf ( "2 + 3 = %d", add ( 2, 3) );
}

  程序运行的结果为输出:
  2 + 3 = 5
  这说明不加返回值说明的函数的确为 int 函数。

  林锐博士《高质量 C/C++

编程》中提到: C++语言有很严格的类型安全检查,不允许

上述情况(指函数不加类型声明)发生 。可是编译器并不一定这么认定,譬如在 Visual 
C++6.0 中上述 add 函数的编译无错也无警告且运行正确,所以不能寄希望于编译器会做
严格的类型检查。

  因此,为了避免混乱,我们在编写 C/C++程序时,对于任何函数都必须一个不漏地
指定其类型。如果函数没有返回值,一定要声明为 void 类型。这既是程序良好可读性的需
要,也是编程规范性的要求。另外,加上 void

类型声明后,也可以发挥代码的 自注释

作用。代码的 自注释 即代码能自己注释自己。

 

 规则二 如果函数无参数,那么应声明其参数为 void

  在 C++语言中声明一个这样的函数:
int function(void)
{