如何将可变大小的指针数组作为参数传递给函数
How to pass a variable size array of pointers as an argument to a function
我有一个 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
。
但我需要避免乘法以限制速度。
除非您有基准数据来支持这一点,否则我认为该要求为过早优化。
相关文章:
- 堆栈和队列是否像C++中的数组一样传递?
- C++函数模板需要 &for 数组参数
- 如何正确使用 fstream 并在 char 数组中传递数据?
- 使用IPC/共享内存将Integer数组从C++传递到Python
- 将数组正确传递给函数 C++
- 将动态数组/矩阵传递给函数进行初始化
- 如何将结构数组从 c++ 传递到 c#?
- 将字节数组从 C++ 传递到 Python
- 2D数组值像数组一样传递,0不打印
- std::string 参数是如何从原始字符数组文本传递的
- C++ 数组参数不起作用
- 使用 C++/CLI 包装器将 2D 数组从 C# 传递到非托管C++
- 使用数组参数进行函数专用化
- 将 2d 数组从 c++ 传递到 qml
- 为什么我的数组参数的方法无法正常工作?(C )
- 使用SWIG Directors将数组从C 传递到Java
- 将数组指针传递到函数时出错
- pthread_create将动态矢量数组中传递到参数中
- C++将数组参数传递给函数
- 通过引用传递数组参数