c语言void指针
过去,我们考虑分配给指针的地址必须与指针声明中指定的类型相同。
例如,如果声明了int指针,则该int指针不能指向浮点变量或其他类型的变量。 也就是说,只能指向int类型的变量。
为了克服这个问题,我使用了指向void的指针。 指向void的指针表示指向所有数据类型的通用指针。
可以为void指针分配任何数据类型的地址,也可以将void指针分配给任何类型的指针,而无需显式类型转换。
void指针语法
void*pointername;
以下是void指针的声明。 void*ptr;
在上述声明中,void是指针类型,' ptr '是指针的名称。
让我们来看几个例子。 inti=9; //初始化整数变量。
int*p; //整数指针声明。
浮点* FP; //浮点指针声明。
void*ptr; //void指针声明。
p=fp; //错误。
fp=i; //错误
ptr=p; //正确
ptr=fp; //正确
ptr=i; //正确
c语言的void指针大小
c语言的void指针的大小与字符类型指针的大小相同。 指向void的指针的表示形式与字符类型的指针相同。 指针的大小取决于所使用的平台。
看看下面的例子。
示例#include
intmain () )
{
void*ptr=NULL; //void指针
int*p=NULL; //整数型指针
char*cp=NULL; //字符指针
浮动* Fp=空值; //浮点指针
//void指针的大小
printf(void指针大小=%dnn )、sizeof(ptr );
//整数指针的大小
printf (整数指针大小=%dnn )、sizeof(p );
//字符指针的大小
printf (字符指针大小=%dnn )、sizeof(CP );
//浮点指针的大小
printf (浮点指针大小=%dnn )、sizeof )和FP );
返回0;
}
输出结果void指针的大小=4
整数指针大小=4
字符指针大小=4
浮点指针大小=4
void指针的优点
以下是void指针的优点。 malloc ()和calloc () )函数返回void指针,因此可以使用这些函数分配任何数据类型的内存。
示例#include
#包含
intmain () )
{
inta=90;
int*x=(int* ) malloc ) sizeof (int );
x=a;
printf(x指针指向的值:%d )、*x );
返回0;
}
输出结果x指针指向的值为:90C的void指针也可以用于实现c的通用函数。
我们为什么要用void指针?
为了可复用性,使用void指针。 void指针可以包含任何类型的对象,并且可以使用具有适当类型转换的间接操作符来检索任何类型的对象。
举个例子来理解吧。
示例#include
intmain () )
{
inta=56; //初始化整数变量' a '。
浮动=4.5; //浮点变量' b '的初始化。
charc='k '; //字符变量' c '的初始化。
void*ptr; //声明空指针。
//给变量“a”分配地址。
ptr=a;
printf(a的值为:%d ),* ) ) (ptr ) );
//给变量' b '分配地址。
ptr=b;
printf((nb的值为:%f ),* ) ) ) ptr ) );
//给变量' c '分配地址。
ptr=c;
printf((NC的值为:%c ),* ) ) ) ptr );
返回0;
}
输出结果a的值为:56
b的值为:4.500000
c的值为:k