是否可以实现一个可以在C中打印任何类型的任何数组的函数?
我是C的新手..我想知道如果我有这样的三个阵列:
int a[] = {1,2,3} char b[] = {'a','c','k'} float c[] = {4.5,5.8} 是否可以编写一个可以打印这些数组中的任何一个的多态函数? prarray(a); prarray(b); prarray(c); 这个表格也可以接受: prarray(a,int); prarray(b,char); prarray(c,float) 是否可以计算出函数void prarray(void *)?有没有人有任何想法? 解决方法
如果没有为被调用函数提供大量帮助就可以完成它,这样它就可以完成它的工作.查看标准C库
qsort() 和
bsearch() 中的两个“多态”函数.
void qsort(void *base,size_t nel,size_t width,int (*compar)(const void *,const void *)); void *bsearch(const void *key,const void *base,const void *)); printf()和scanf()系列是处理多种类型的其他函数. 您的打印阵列功能可能需要: typedef int (*DataPrinter)(void *ctxt,void *data); extern int prarray(void *base,DataPrinter pr_func,void *ctxt) 数据打印机功能指针将负责打印一个值 – 由data参数指定. ctxt值是指向数据打印机功能所需的任何控制信息的指针(它可能像FILE *一样简单,可能更复杂).数据打印机功能返回的值是写入的字符数;从prarray()返回的值是写入的字符总数. 当然,这仅适用于一维数组.要打印2D或3D阵列的子部分,您需要更复杂的代码.如果您需要担心换行符等,那很可能是ctxt的域.或者您为此功能设计了更复杂的接口.请注意,为指定值分隔符提供的唯一机制是通过ctxt结构.这将起作用(或可以起作用),但它可能太笨拙了. 带有_Generic的C2011解决方案很有意思,但N类型需要N个函数,每个类型都处理打印数组.我无法完全摆脱:我的解决方案需要N 1个函数,但只有其中一个(1)处理数组; N个函数都处理打印给定类型的单个值,这比打印给定类型的整个数组更简单.当然,如上所述,它需要在每个相关平台上使用C 2011编译器.由于至少有一个“经常相关”的平台没有供应商提供的C 1999编译器,因此可能需要一段时间才能在该平台上使用C 2011. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |