指针传递到一个数组的数组的函数

问题描述:

我有设置下列变量的主功能:指针传递到一个数组的数组的函数

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,1/2)的每个组合,并检查它们的值的总和。产生最小和的两个阵列最终从上面变成result1result2

看到,因为这是我第一次真正钻研指针/阵列/矩阵的领地,我有几个问题:

  • 我是不是正确的“渐”的指针矩阵?或者我需要获得一个指向矩阵的第一个值的指针吗?
  • smallestSum(),我可以遍历数组了,因为我通常会(使用for (int i = 0; i < num; i++)
+0

使用'矢量>'然后传递给你的函数,'矢量>&v' voila! – 2014-09-23 00:03:20

您需要更改的ptr_matrix的定义,因为它不是一个指向单一双,但对整排:

double (*ptr_matrix)[size] = &matrix[0]; 

然后,你可以调用函数如下:

smallestSum(ptr_matrix, numVectors, ptr_result1, ptr_result_2); 

smallestSum,你可以遍历行和列迭代。

请注意size必须在编译时已知。

如果该函数不修改矩阵,请考虑将const添加到其第一个参数的类型。

+0

甜,那工作。更有意义。但是,在迭代矩阵时,我将如何取消引用其中一行来获取行的实际值?我现在有'(* mat)[0]'(对于第一行),但是这给了我一种'double *',而我想要一个'double []'。 – n0pe 2014-09-23 00:19:53

+0

@MaxMackie您可以使用'double *'值,就好像它是'double []'。要访问矩阵中的单元格,可以编写'mat [i] [j]'('i'是行索引,'j'是列索引]。 – abacabadabacaba 2014-09-23 00:23:03

+0

也许我错误地表达了错误。在该函数中,我调用另一个函数来处理两个数组(矩阵中的行)。第二个函数的原型是'second(double a1 [],double a2 [])''。我认为'double *'与'double []'造成冲突。那是错的吗? – n0pe 2014-09-23 00:49:08

The answer abacabadabacaba gave大部分是正确的,只是在编译时不需要知道size。如果包含size作为参数的函数,你可以使用它作为该函数用于其他参数类型的一部分:

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