关键字void的使用

先来一个例子:
void a;
这行代码在Visual C++6.0中会编译出错,即使不出错,它也没有任何实际意义。
void不能代表一个真实的变量,定义变量时必须分配内存空间,而void体现的是一种抽象。
那么void的作用是什么呢?它主要的作用是:
对函数返回值的限定;对函数参数的限定。
看下面的代码:

int *p1;
float *p2;
p1 = p2;

编译时会出错,因为p1和p2的类型不同,那么我们只需要做一下类型的强制转换

p1 = (int*)p2;

那么void 需要这样吗,我们都知道void是无类型的。所以void 可以接受任何类型的指针对它进行赋值,不需要进行强制转换。

void * p1;
int * p2;
p1 = p2;

但是反过来就不可以,因为 “空类型” 可以包容 “有类型” ,但是 “有类型” 不能包容 “空类型” 。如果是下面的语句,就会报错告诉你无法从“ void * ”转换到“ int * ”。

void * p1;
int * p2;
p2 = p1;

void修饰函数返回值和参数
如果函数没有返回值,那么我们应该将它声明为void类型。
我们经常觉得如果没有返回值,不写就默认为void类型了,然而实际上却不是这样的。在C语言中,凡是不加返回值类型限定的函数,都会被默认成是 int类型的返回值处理。例如:

add(int a,int b)
{
    return a + b;
}
int main(int argc,const char *argv[])
{
    int a = 3;
    int b = 7;
    printf("%d\n",add(a,b));
}

上面程序运行的结果是 10
为了避免混乱,我们在编写代码的时候注明返回值类型,如果无返回值,一定要声明为void类型,方便理解。
同样的,如果函数无参数,那么将其声明为void类型。
例如,在C++中有如下代码段:

int fun(void)
{
    return 1;
}
通过fun(2)调用是不合法的。

在C++中,函数参数void的意思就是这个函数不接受任何参数。
在C中编译下面的代码,得到的结果会是怎样呢?

fun()
{
    return 1;
}
main()
{
    printf("%d\n",fun(2));
    getchar();
}

上面的代码编译正确,并且输出为1,说明它成功调用了fun函数,也就是说,在C语言中,可以给无参数的函数传送任意类型的参数,但是在C++中却不可以,在C++中 不能想无参数的函数传任何类型的参数。
所以,无论在C还是C++中,如果函数不接受任何参数,请指明参数为void类型吧。

你可能感兴趣的:(关键字void的使用)