加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

是否可以实现一个可以在C中打印任何类型的任何数组的函数?

发布时间:2020-12-16 10:23:05 所属栏目:百科 来源:网络整理
导读:我是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);
我是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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读