一、认识void
在C语言中,void是一个关键字,表示无类型,空类型。
二、为什么需要void类型
描述一段还没有具体使用的内存就需要使用void类型。
三、void使用
1. void不能去定义变量。例如:
void a = 10;
printf("a=%d\n",a);
//上述定义变量a为void类型 是错误的。编译的时候编译器是不会通过。
2. 为什么void不能定义变量?
1)定义变量的本质是在内存上开辟一段空间使用。那如果要使用这段空间,就必须得有数据类型。
2)数据类型的本质决定了变量的内存占用数和内存的解析方法。所以在定义变量的时候就必须有确定的数据类型。
3)如果没有一个变量没有确定的类型。那么编译器就无法解析这个变量对应的内存。比如说void a ; 就是错误的
1.用于函数的返回值类型
当定义一个函数,如果函数不想要返回值,则可以使用void。例如在C语言中:
void Sum(int a , int b){
printf("%d\n",a+b);
}//这个函数就是没有返回值 函数前的返回值类型为 void 表示空
int Sub (int a, int b){
return a-b;//这个函数就是有返回值,函数前的返回值类型是int。返回的是一个int型数据
}
2.用于函数的形参列表
当定义一个函数,这个函数不需要传参数,就是形参列表没有时。可以用void占位,也可不写。例如:
voidShow( void){
printf("hello world");
}//无参数是写void更严谨
//或者是不写
voidShow( ){
printf("hello world");
}
3.用于指针表示空类型 void*
举个例子:在C语言中需要手动申请空间使用malloc函数。
这是malloc函数原型:void *malloc(size_t size);
malloc()函数分配大小字节,并返回一个指向已分配内存的指针。内存未初始化。如果大小为0,那么malloc()返回NULL,
malloc函数向系统堆管理器申请一段内存给当前程序使用,malloc返回的是一个指针,这个指针指向申请的那段内存空间。这个时候,申请成功的内存空间还没有存储数据。同时malloc函数也不能预知将来会放什么类型的数据在这段申请成功的内存空间。不知道什么数据什么类型,就无法返回具体类型的指针。因此就需要用void*,告诉外部申请到了一段未确定类型的干净内存。当然要使用这段内存就会存储数据。存储数据就会确定数据类型。所以最终void*类型会被强制转换成确定的类型
举个例子:有一个结构体,需要手动申请这个结构体空间
typedef struct Student{
int ID;
char name[10];
int score;
}Stu;
int main(){
Stu* zhangsan = (Stu*)malloc(sizeof(Stu)); //将malloc申请的内存空间void*强制转换为Stu*类型
}