首页 > 解决方案 > 有没有办法在 C 标准库中以向量化形式表示数组?

问题描述

我正在尝试输入以下数组

float array[3] = {a, b, c};

进入一个函数说

3DLocation(float x, float y, float z)

作为

3DLocation(array[3])

而不是作为

3DLocation(array[0], array[1], array[2])

像 R 或 Python(带有某些库)等那样矢量化。
有没有办法在标准库中做到这一点?
如果没有,有没有办法让一个函数只用标准库来做到这一点?
如果没有,什么是可以帮助我做到这一点的图书馆?
另外,“矢量化”是我正在寻找的术语吗?
而且,“表达”是对的,还是我应该编辑我的问题以改为“访问”?

标签: arrayscvectorization

解决方案


有没有办法在标准库中做到这一点?

C 没有 Python 的一元运算符的内置模拟*(一元*在 C 中具有不同的含义,尽管在某些方面类似)。

如果没有,有没有办法让一个函数只用标准库来做到这一点?

您可以编写一个辅助函数来完成它:

void call_unpacked(void (*func)(float, float,float), float args[]) {
    func(args[0], args[1], args[2]);
}

然后,您可以根据需要多次使用它:

call_unpacked(3DLocation, array);

你也可以写成call_unpacked()一个宏,它有一些优点,或者你可以写一个专门包装的函数或宏来代替通用包装器3DLocation()

void 3DLocation_unpacked(float a[]) {
    3DLocation(a[0], a[1], a[2]);
}

但是标准库中没有这样的函数或宏。

如果没有,什么是可以帮助我做到这一点的图书馆?

图书馆推荐的请求在这里是题外话。

另外,“矢量化”是我正在寻找的术语吗?

Python 中的常用术语(因为您提到该语言)涉及“解包”一词的形式,例如我在前面使用的。我认为您所谈论的内容没有任何跨语言共识。

而且,“表达”是对的,还是我应该编辑我的问题以改为“访问”?

“快递”对我来说似乎不合适,尽管我明白你的意思。“访问”更糟糕。就个人而言,我倾向于坚持使用“解包”,改写问题以使其适合。


推荐阅读