如何将可变大小的指针数组作为参数传递给函数

How to pass a variable size array of pointers as an argument to a function

本文关键字:数组 参数传递 函数 指针      更新时间:2023-10-16

我有一个 char* 数据,我投射了它,以便像这样访问它

arr[2][3]

我以这种方式进行:

char (*arr)[size] = (char (*)[size])data;

我的问题是如何将"arr"作为参数传递给函数?

void func(??? arr)
{
   ...
}
void test(char *data, int size)
{
   char (*arr)[size] = (char (*)[size])data;
   func(arr);
}

我不知道编译时"大小"的值。

另外,我知道我可以像这样访问我的值:data[2 * size + 3],但我需要避免乘法以限制速度。

另外,我知道我可以像这样访问我的值:data[2 * size + 3],但我需要避免乘法以限制速度。

以你提议的方式无法避免这一点。如果您访问像x[2][3]这样的数据,您希望编译器做什么?它会将其索引转换为等效的 2 * size + 3 。如果这对您的问题来说太慢了,那么您就不走运了,需要找到另一种方法来争取时间。您无法工作的建议解决方案不是解决方案,因此即使尝试它也没有意义。

也许您可以更改代码以使用不同的访问模式,一种没有那么多需要所有这些乘法的复杂跳转的模式?线性内存访问往往是最好的类型,因为它们利用了内存层次结构;也许你可以利用这一点?但是,很难说在不知道代码的作用的情况下可以更改什么。

我有一个 char* 数据,我投射了它,以便像这样访问它

这就是你问题的根源。它是一个连续的内存块。如果您需要不同的界面,请编写视图立面,或者...

我的问题是如何将"arr"作为参数传递给函数?

最简单的方法是避免使用语言中留下的(糟糕的)低级原语以实现 C 兼容性。

如果在编译时不知道大小,请使用 std::vector 。如果您知道,请使用 std::array

但我需要避免乘法以限制速度。

除非您有基准数据来支持这一点,否则我认为该要求为过早优化。