C语言 参数的个数是确定的,但是参数的类型不太确定,请问怎么实现呀?很急,在线等....

比如有两种结构体struct Client *a;struct Good *b;设计一个函数,可以根据a->num对链表进行排序,或根据b->name对b进行排序,用一个排序函数能够实现吗?函数的参数又该怎么设置呢?

应该可以的,是对a/b两个指针作为起始指针的链表来排序是吧?先分析一下:
1,a,b是两种类别的结构体指针;
2,num,name 是不同结构体里面的不同类型的成员名称;
3,因为成员类型不同,所以排序的策略肯定也不同,比方 num 是数字,name 是字符串,需要使用不同的策略来排序,如数字的大小/字符串的大小等等;

所以可以这么考虑来设计排序函数的构造:
a,需要传入一个指针,可以用 void *,来指向不同的结构体构成的链表;
b,传入要排序的字段在该结构体中的偏移植 offset ,注意结构体的对齐方式和具体的处理器架构和操作系统有关系,尽量使用可移植的方法;
c,用函数指针的形式传入所需要的比较策略,比方数字大小比较函数,字符串大小比较函数之类的。

这样实现可以适针对任意结构体中任意类型的字段,按照任意的比较策略来实现排序。你可以在这个排序函数中使用不同的排序算法,如插入排序/冒泡排序/归并排序之类的。

这个问题很有意思,:) 我们会介绍给我们的同学。欢迎你到 JulianTec 的邮件列表中讨论这样的问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-23
不推荐在同一个函数实现两种类型的排序,如果你非要在一个函数内实现,那也不是不行,只要你加一个判断,根据传入的参数的类型(typeid(变量).name )去决定如何排序。
至于函数的参数,你可以写为 void * ms,然后在函数体内来一个强制类型转换,比如:
Client * pa = (Client*)ms;追问

那我要返回指针时,因为不确定指针的类型,函数的类型应该怎么定义呢?

追答

两种思路,第一就是返回void *,然后还是用上面的强制类型转换。第二种思路就是将参数设置为引用或指针。
我猜你返回的是不是数组首元素的地址,那这样的话直接将返回值类型写成 void 就行了,因为参数传递进来的是指针,所以参数就是返回值了。

本回答被提问者采纳
第2个回答  2011-06-23
参数类型不确定时,全部都声明称void* 在函数实现里将该参数再强制转换成对应的类型;
排序能实现,你可以参考qsort

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网