你的问题中包含了很多无关的话题map()。你应该尽量避免这种情况,并更加专注。如果有几件事你想知道,把它们分成自己的问题,不要只是对整个问题大发雷霆。
在 C 语言中,如果不首先发明一种方法来描述所涉及的所有数据,就无法编写通用的“应用此函数”代码,那么这可能是可能的。
如果你的数据是整数,你需要这样的东西:
int * map_int(const int *input, size_t input_len, int (*func)(int x));
上面应该返回一个与输入相同大小的动态分配数组,其中每个元素都是在func()相应输入元素上运行的结果。map()在这里,这可能与您需要的通用性一样接近。
这可以很简单地实现,如下所示:
int * map_int(const int *input, size_t input_len, int (*func)(int x))
{
int *out = malloc(input_len * sizeof *out);
if(out != NULL)
{
for(size_t i = 0; i < input_len; ++i)
out[i] = func(input[i]);
}
return out;
}
请注意,上述内容将假定func有效;一个更合理的通用函数可能应该将NULL函数指针视为恒等映射。另请注意,它会进行堆分配并将所有权转移给调用者。一个更合理的实现也许也应该支持调用者拥有的缓冲区。