首先我们得明白 void 是"无类型",意为没有返回值的意思。
void 的作用
1.对函数返回的限定
2.对函数参数的限定
当函数不需要返回值时,必须使用void限定,这就是我们所说的第一种情况。例如:void func(int a,char *b)。
有返回值的情况:
#include<stdio.h>
int add(int a, int b);
int main()
{
int a = 2, b = 3;
printf("\n这是调用add()函数后返回主函数输出的数 = %d\n", add(a, b));
}
int add(int a, int b)
{
return a + b;
}
没有返回值的情况:
#include<stdio.h>
void add(int a, int b);
int main()
{
int a = 2, b = 3;
add(a, b);
return 0;
}
void add(int a, int b)
{
printf("\n这是调用add()函数时输出的数 = %d\n", a + b);
//因为该void add()函数没有返回值,所以只能在该函数内输出。
}
当函数不允许接受参数时,必须使用void限定,这就是我们所说的第二种情况。例如:int func(void)。
#include<stdio.h>
int func(void);
int main()
{
//printf("\n%d\n", func(1));报错,显示func()调用的参数过多。
printf("\n%d\n", func());
return 0;
}
int func(void)
{
return 1;
}
void 指针的使用规则
众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。
例如:
float *p1;
int *p2;
p1 = p2;
其中p1 = p2语句会编译出错
提示“'=' : cannot convert from 'int *' to 'float *'”
必须改为:p1 = (float *)p2;
*而void 则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换
void *p1;
int *p2;
p1 = p2;
注意!!!
*但这并不意味着,void 也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。
例如:
void *p1;
int *p2;
p2 = p1;
提示“'=' : cannot convert from 'void *' to 'int *'”。