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

标签 c++ arrays

我有一个 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/

相关文章:

C++ 模板类型转换与导数

c++ - 列表元素被替换而不是插入

java - 为此我需要单个循环还是嵌套循环?

javascript - Backbone.js 比较函数,如何实现降序?

PHP:数组中出现频率最高的值

c++ - Qt 显示超大富文本的最佳方式?

c++ - 如何在 qt 标签中显示 em dash 字符?

ios - 附加在函数内部的数组在其他类中不起作用

javascript - 数组到字符串转换,Php到js

c++ - Zlib 压缩输入大于原始输入字符字符串?