【发布时间】:2014-10-27 22:48:33
【问题描述】:
我最近试图找出使用void * 数组而不是典型类型(int、char 等)的好处。所以我尝试编写一个多态 (void *) 函数,它接受任何类型数据的 3 个数组 (a, b, c) 作为参数,并在数组 a 和 b 的每个节点之间进行计算,并将结果放入数组 @ 987654329@。计算的类型(sum、sub 等)和要计算的数据类型取决于用户(也许我们可以为函数使用另外两个参数)。
所以我的函数原型如下所示:
void *apply(void *a, void *b, void *c, int calc, int typeOfCalc);
我无法理解如何使用每个 void 数组的内容,具体取决于其类型,以及如何根据用户想要的数据类型进行计算。
编辑
我找到了一个练习,它问的问题和我一样,并说:
编写一个多态函数
"apply",其参数相同 任何(每种)类型的元素的尺寸表(a,b,c),使 a [i] b [i] 之间的事务对于每个 i 并将结果 对 c[i] 采取行动。行为和结果将产生,被确定 调用者函数。
【问题讨论】:
-
您必须将数组转换回正确的类型,具体取决于计算。因此,如果您的计算涉及浮点数,则必须将数组转换回浮点数。我猜
typeOfCalc传达了这些信息。 -
这就是为什么我会避免使用“多态”数组...在某些地方您需要强制转换、复制和大量 IF...
-
事实上,您所描述的行为在 C++ 中比在 C 中做得更好。如果您真的想要这种行为,并且如果您可以使用 C++,请改用它。
-
我并不是真正的多态性粉丝,但这是我想知道的。 @Evert typeOfCalc 实际上是用户想要从计算中产生的。例如,在通话之前,我有 int a[5] = {1,2,3,4,5} 和 char b[5] = {'a','b','c','d','e '} 并且用户说希望将这两个数组的总和作为字符..
-
检查man qsort,特别是例子。
标签: c arrays polymorphism void