我使用将图像转换为二维数组的一组像素的图像;有些函数对二维数组进行操作,并且由于图像的大小不同,因此不可能将二维数组传递给不是其中定义的大小的函数:
void func(int arg[2400][2400]);
int arr[1920][1080];
void func(arr);// ERROR
工作的最大值是一种类型:
void func(int (*arr)[1080]);
int arr[1920][1080];
void func(arr);
但即使在这里,也不是一切都好,因为至少在二维数组的一侧 - 一切都必须精确指定,如果图像大小不同,这是不可能的。
void func(int (*arr)["размер"]);
是否有任何机制可以将双精度数组传递给函数而不指定其大小?
目前尚不清楚在什么情况下会出现这样的问题。C++ 中没有二维数组的大小只有在运行时才知道。在实际实践中,这通常是必需的。因此,在实践中,未知大小的多维数组要么基于一维数组(手动重新计算索引)实现,要么作为“参差不齐的数组”,即 指向子数组的指针数组。(我们将假设
std::vectorfromstd::vector也属于后一类。)只有当您确实需要在程序中使用不同大小的二维数组时,只有一些特殊情况,同时这些二维数组被明确声明为:在编译阶段已知大小(如在您的例子)。
在这种情况下,您有机会将您的函数实现为模板函数,并在模板参数列表中取出大小
如果由于某种原因您对模板解决方案不满意,那么您将不得不按照
int **“数组”来编写函数并将您的原始数组传递给它
首先创建一个临时的中间指针数组
在 C 语言中,您可以使用 VLA,它可以漂亮而优雅地解决这个问题。
但是在 C++ 中你没有那个选项。
元素的地址是通过将行号乘以行大小来计算的,因此是一个大小 - 必须指定行中的元素数
如果我们有一个二维数组
m,则表达式被m[i][j]解释为*(*(m + i) + j)。表示为二维数组的矩阵作为指针传递(未复制),因此要传递两个维度(行和列),一种解决方案是:和例子