我有一个 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);
}
我在编译时不知道“size”的值。
此外,我知道我可以像这样访问我的值:data[2 * size + 3] 但我需要避免速度限制的乘法。
最佳答案
Also, I know that I could just access my value like this : data[2 * size + 3] but I need to avoid multiplications for speed constraints.
这无法以您提出的方式避免。如果您访问像 x[2][3]
这样的数据,您希望编译器做什么?它会将索引转换为 2 * size + 3
的等价物。如果这对你的问题来说太慢了,那你就倒霉了,需要找到另一种方法来赢得时间。您无法实现的建议解决方案不是解决方案,因此即使尝试它也毫无意义。
也许您可以更改您的代码以使用不同的访问模式,一种不需要那么多需要所有这些乘法的复杂跳转的模式?线性内存访问往往是最好的排序,因为它们利用了内存层次结构;也许你可以利用它?不过,即使不知道代码的作用,也很难说您可以更改什么。
关于c++ - 如何将可变大小的指针数组作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30864926/