[英]Passing a pointer to an array of arrays to a function
我有一个设置以下变量的主要功能:
double matrix[numVectors][size] = {
{0.183963, 0.933146, 0.476773, 0.086125, 0.566566, 0.728107, 0.837345, 0.885175, 0.600559, 0.142238},
{0.086523, 0.025236, 0.252289, 0.089437, 0.382081, 0.420934, 0.038498, 0.626125, 0.468158, 0.247754},
{0.969345, 0.127753, 0.736213, 0.264992, 0.518971, 0.216767, 0.390992, 0.242241, 0.516135, 0.990155}
};
double result1[size], result2[size];
double *ptr_matrix = &matrix[0];
double *ptr_result1 = &result1[0];
double *ptr_result2 = &result2[0];
上面要尝试做的是:
然后,我试图将所有三个指针传递给另一个函数。 另一个函数将遍历矩阵行(仅行,它不访问整个矩阵空间),使用该行(作为数组)执行计算。 最终结果是在开始处声明的两个空数组结束,每个空数组都从矩阵变成一行。
这是第二个函数的原型:
void smallestSum(double (*mat)[size], int num, double *first, double *second)
此函数遍历矩阵行的每种组合(0 / 1、0 / 2、1 / 2),并检查其值的总和。 产生最小总和的两个数组最终从上方变成result1
和result2
。
看到这是我第一次真正研究指针/数组/矩阵领域,所以我有几个问题:
smallestSum()
,是否可以像往常一样遍历数组( for (int i = 0; i < num; i++)
? 您需要更改ptr_matrix
的定义,因为它不是指向单个double的指针,而是指向整个行的指针:
double (*ptr_matrix)[size] = &matrix[0];
然后,您可以按以下方式调用该函数:
smallestSum(ptr_matrix, numVectors, ptr_result1, ptr_result_2);
在smallestSum
内部,您可以遍历行和遍历列。
请注意,必须在编译时知道size
。
如果函数没有修改矩阵,请考虑将const
添加到其第一个参数的类型。
abacabadabacaba给出的答案基本上是正确的,只是在编译时不需要知道size
。 如果将size
用作函数的参数,则可以将size
用作该函数其他参数的类型的一部分:
void smallestSum(int size, double (*mat)[size], int num, double *first, double *second)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.