繁体   English   中英

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

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

上面要尝试做的是:

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

然后,我试图将所有三个指针传递给另一个函数。 另一个函数将遍历矩阵行(仅行,它不访问整个矩阵空间),使用该行(作为数组)执行计算。 最终结果是在开始处声明的两个空数组结束,每个空数组都从矩阵变成一行。

这是第二个函数的原型:

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

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

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

  • 我是否正确“获取”了指向矩阵的指针? 还是我需要获取一个指向矩阵第一个值的指针?
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM