【发布时间】:2018-02-08 17:50:01
【问题描述】:
我需要编写函数,在不知道元素类型的情况下用数值元素计算数组的平均值。
如果我愿意,需要使用数组、数组元素的数量和其他参数调用该函数。
这就是我现在所拥有的:
int arr[2] = { 3,7 };
avarage(arr, 2, sizeof(int));
void * avarage(void * arr, int elements, int bytes)
{
int i;
char *p = (char *)malloc(bytes);
char *tmp = (char *)arr;
char *n;
int sum = 0;
for (i = 0; i < elements * sizeof(bytes); i++)
{
p[i] = tmp[i];
}
}
因为我不知道我使用通用指针的元素类型:void * 并且还将我的类型的大小发送到我的函数中。
在我的电脑中,我可以看到 bytes 是 4,所以经过 4 次迭代后,我需要将我的 p 转换为 Int。
所以loop 里面的东西开始乱了,我不知道该怎么做。
【问题讨论】:
-
平均值为
(sum(elements) / totalelements)。如果您的elements是完全任意类型,则调用者必须提供相应的sum函数作为函数指针。或者plus函数。 -
首先我想知道如何将我的数组转换为数字
-
谁说这些是数字?也许它是向量?还是矩阵?还是……苹果?您说类型未知(顺便说一句,在我之前的评论中应该还有“除法”功能)
-
@DeanMovy,您似乎专注于错误的地方。特别是,您断言 4 次迭代后我需要将我的 p 转换为 Int 是不明智的。如果输入包含
floats 怎么办?然后,您不能期望转换为int而不会丢失精度和/或完全获得错误的值。也没有任何其他特定类型可以适当地适应所有 C 算术类型。 -
泛型在 C 中很难做到。之前有几个问题询问过如何做到这一点。答案通常倾向于涉及 C 预处理器。它可能不是你想要的,但也许看看?这是link。
标签: c