函数的类型是空指针,有什么作用?void *initiate(...)这样的函数void函数直接用就行了啊,写个void initiate(...)就行了吧为什么要写成void *initiate(..)呢?有什么区别吗?
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 12:13:16
函数的类型是空指针,有什么作用?void *initiate(...)这样的函数void函数直接用就行了啊,写个void initiate(...)就行了吧为什么要写成void *initiate(..)呢?有什么区别吗?
函数的类型是空指针,有什么作用?void *initiate(...)这样的函数
void函数直接用就行了啊,写个void initiate(...)就行了吧
为什么要写成void *initiate(..)呢?有什么区别吗?
函数的类型是空指针,有什么作用?void *initiate(...)这样的函数void函数直接用就行了啊,写个void initiate(...)就行了吧为什么要写成void *initiate(..)呢?有什么区别吗?
其本质在于void *(无类型指针)可以包容任何类型的指针,也就是可以把任何类型指针赋值给void ×,但反过来将void ×赋值给某一类型指针时则必须强制类型转换.
举例说明:
我们知道C语言中函数返回值得类型必须确定,也就是一个函数只能返回其固定类型的值,那么如果需要根据不同输入值返回不同类型的结果怎么办?这样就可以:
定义一个结构体,两个字段,data为数据,type为类型
typedef struct _Data
{
void *data; // 数据字段,指向具体创建的控件的数据
TYPE type; // 类型(只读属性,开发人员请勿直接修改)
}Data;
那么函数就可以这样写:
Data getData(TYPE type){
Data data;
if(type == "数字"){
data.type = "数字";
data.data = maollc一段内存,里面放具体数字
}else if(type == "字符串"){
data.type = "字符串"
data.data = maollc一段内存,里面放具体字符串
}
return data;
}
这样用时就很方便了,
Data myData = getData("数字");
printf("%d",*((int *)myData.data));
Data myData = getData("字符串");
printf("%s",(char *)myData.data);
不仅统一了接口(都调用getData()函数),返回值也可以随便作为参数传递,只有要用到具体数据的时候再将它取出来.
不仅可以实现多态,还可以实现继承...