将指向数组数组的指针传递给函数

时间:2014-09-22 23:53:56

标签: c++ c arrays pointers matrix

我有一个主要功能,它设置以下变量:

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];

以上尝试做的是:

  • 创建一个包含三行10个双打的数组
  • 创建两个10个双打的空数组
  • 创建指向矩阵的指针
  • 创建指向两个空数组的指针

然后,我试图将所有三个指针传递给另一个函数。这个其他函数将迭代矩阵行(只有行,它不访问整个矩阵空间),使用行(作为数组)执行计算。最终结果是在开头结束时声明的两个空数组,每个数组都成为矩阵的一行。

这是第二个函数的原型:

void smallestSum(double (*mat)[size], int num, double *first, double *second)

此函数遍历矩阵行(0 / 1,0 / 2,0,1)的每个组合,并检查其值的总和。产生最小总和的两个数组最终从上面变为result1result2

看到这是我第一次真正钻研指针/数组/矩阵领域,我有几个问题:

  • 我是否正确“获取”指向矩阵的指针?或者我是否需要获取指向矩阵的第一个值的指针?
  • smallestSum()中,我可以像往常一样迭代数组(使用for (int i = 0; i < num; i++)吗?

2 个答案:

答案 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)