我有一个主要功能,它设置以下变量:
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,0,1)的每个组合,并检查其值的总和。产生最小总和的两个数组最终从上面变为result1
和result2
。
看到这是我第一次真正钻研指针/数组/矩阵领域,我有几个问题:
smallestSum()
中,我可以像往常一样迭代数组(使用for (int i = 0; i < num; i++)
吗?答案 0 :(得分:1)
您需要更改ptr_matrix
的定义,因为它不是指向单个double的指针,而是指向整行:
double (*ptr_matrix)[size] = &matrix[0];
然后,您可以按如下方式调用该函数:
smallestSum(ptr_matrix, numVectors, ptr_result1, ptr_result_2);
在smallestSum
内,您可以遍历行和列。
请注意,编译时必须知道size
。
如果函数没有修改矩阵,可以考虑将const
添加到其第一个参数的类型中。
答案 1 :(得分:0)
size
之外, The answer abacabadabacaba gave大多是正确的。如果将size
作为参数包含在函数中,则可以将其用作该函数的其他参数类型的一部分:
void smallestSum(int size, double (*mat)[size], int num, double *first, double *second)