指针传递到一个数组的数组的函数
我有设置下列变量的主功能:指针传递到一个数组的数组的函数
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)的每个组合,并检查它们的值的总和。产生最小和的两个阵列最终从上面变成result1
和result2
。
看到,因为这是我第一次真正钻研指针/阵列/矩阵的领地,我有几个问题:
- 我是不是正确的“渐”的指针矩阵?或者我需要获得一个指向矩阵的第一个值的指针吗?
- 在
smallestSum()
,我可以遍历数组了,因为我通常会(使用for (int i = 0; i < num; i++)
?
您需要更改的ptr_matrix
的定义,因为它不是一个指向单一双,但对整排:
double (*ptr_matrix)[size] = &matrix[0];
然后,你可以调用函数如下:
smallestSum(ptr_matrix, numVectors, ptr_result1, ptr_result_2);
内smallestSum
,你可以遍历行和列迭代。
请注意size
必须在编译时已知。
如果该函数不修改矩阵,请考虑将const
添加到其第一个参数的类型。
甜,那工作。更有意义。但是,在迭代矩阵时,我将如何取消引用其中一行来获取行的实际值?我现在有'(* mat)[0]'(对于第一行),但是这给了我一种'double *',而我想要一个'double []'。 – n0pe 2014-09-23 00:19:53
@MaxMackie您可以使用'double *'值,就好像它是'double []'。要访问矩阵中的单元格,可以编写'mat [i] [j]'('i'是行索引,'j'是列索引]。 – abacabadabacaba 2014-09-23 00:23:03
也许我错误地表达了错误。在该函数中,我调用另一个函数来处理两个数组(矩阵中的行)。第二个函数的原型是'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)
使用'矢量>'然后传递给你的函数,'矢量>&v' voila! – 2014-09-23 00:03:20