定义:
void:是空类型,是数据类型的一种
void*:是指针类型,是指针类型的一种,可以匹配任意类型的指针,类似于通配符
void
说明:void作为返回值类型使用,表示没有返回值;作为形参,表示形参列表为空,在调用函
数是不能给实参
举例:
// 函数声明
void fun(void); // 等效于 void fun();
// 函数调用
fun();
void*
说明:
void*是一个指针类型,但该指针的数据类型不明确,无法通过解引用获取 内存中的数据,
因为 void* 不知道访问几个内存单元。
void*是一种数据类型,可以作为函数返回值类型,也可以作为形参类型
void*类型的变量在使用之前必须强制类型转换,明确它能够访问几个字节的内存空间
int *p = (int*)malloc(4);
double *p2 = (double*)malloc(8);
举例:
#include <stdio.h>
#include <stdlib.h>
// 函数定义
void* fun(void* p) // 指针函数(返回值类型是指针的函数,此时返回的是不明确类型,需要外部强转)
{
int *p;
// double *p;
// long *p;
// char *p;
return p;
}
// 函数调用
void main()
{
int *p;
void* a = fun(p);// 这种接收方式,实际上没有意义
printf("%p\n",a);// 可以正常打印,打印出一个地址
*a = 10;// 编译报错,void*变量不能解引用访问数据
int *w = (int*)a;
*w = 10;// 编译和运行正常,void*变量a在使用前已经强制类型转换了,数据类型明确了,访问的内存
单元明确了。
}
说明:
void*作为返回值类型:这个函数可以返回任意类型( char*,int*,double*等 )的指针。
void*作为形参类型:这个函数在调用时,可以给任意类型( char*,int*,double*等 )的指
针。
总结:
void* 类似于通配符,不能对void*类型的变量解引用(因为不明确内存单元的大小)。
void*在间接访问(解引用)前要强制类型转换,但不能太随意,否则存和去的数据类型不 一致。