作业帮 > 综合 > 作业

函数的类型是空指针,有什么作用?void *initiate(...)这样的函数

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/05 04:21:45
函数的类型是空指针,有什么作用?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()函数),返回值也可以随便作为参数传递,只有要用到具体数据的时候再将它取出来.
不仅可以实现多态,还可以实现继承...
再问: 理解了!谢谢 但是为啥在主函数中用它的时候,就把它当void用了呢?没有用到它的 返回值(即 空类型的指针) 函数是这样写的 void *initiate(slnode **h) { *h=(slnode*)malloc(sizeof(slnode)); (*h)->next=null; } 后面主函数用它的时候是: initiate(&p);
再答: 在一个函数中,可以使用此函数的返回值,也可不使用,比如众所周知的printf函数中,他也有函数值,但是我们可以不用,对于nitiate函数也是一样的。明白吗?望采纳!