c语言定义输出数组的函数,是否可以实现一个可以在C中打印任何类型的任何数组的函数?...

如果没有为被调用函数提供大量帮助就可以完成它,这样它就可以完成它的工作.查看标准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, size_t nel,

size_t width, int (*compar)(const void *, const void *));

printf()和scanf()系列是处理多种类型的其他函数.

您的打印阵列功能可能需要:

typedef int (*DataPrinter)(void *ctxt, void *data);

extern int prarray(void *base, size_t nel, size_t width,

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值