C++ 将指向数组数组的指针传递给函数
我有一个设置以下变量的主函数:C++ 将指向数组数组的指针传递给函数,c++,c,arrays,pointers,matrix,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.46815
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)
void smallestSum(int size, double (*mat)[size], int num, double *first, double *second)
此函数用于检查矩阵行的每个组合(0/1、0/2、1/2)并检查其值的总和。产生最小和的两个数组最终从上面变成result1
和result2
鉴于这是我第一次真正深入研究指针/数组/矩阵领域,我有几个问题:
- 我是否正确地“获取”了指向矩阵的指针?或者我需要得到一个指向矩阵第一个值的指针吗
- 在
smallestSum()
ptr\u矩阵的定义,因为它不是指向单个double的指针,而是指向整行的指针:
double (*ptr_matrix)[size] = &matrix[0];
然后,您可以按如下方式调用该函数:
smallestSum(ptr_matrix, numVectors, ptr_result1, ptr_result_2);
在smallestSum
中,您可以对行和列进行迭代
请注意,size
必须在编译时已知
如果函数不修改矩阵,考虑将<代码> const <代码>添加到它的第一个参数的类型中。
除了编译时不需要知道<代码>大小<代码>外,大部分都是正确的。如果将<代码>大小>代码>作为函数的参数,则可以将其用作该函数的其他参数的类型的一部分。n:
void smallestSum(double (*mat)[size], int num, double *first, double *second)
void smallestSum(int size, double (*mat)[size], int num, double *first, double *second)
使用vector
然后传递给您的函数,vector&v
voila!Sweet,这很有效。更有意义。但是,当在矩阵上迭代时,我如何取消对其中一行的引用以获得该行的实际值?我目前有(*mat)[0]
(对于第一行),但这给了我一种类型的double*
,而我想要一个double[]
@maxmakie你可以使用double*
值,就像它是double[]
一样。要访问矩阵中的单元格,你可以写mat[I][j]
(I
是行索引,而j
是列索引)。可能是我误解了错误。在该函数中,我调用了另一个函数来处理两个数组(矩阵中的行)。第二个函数的原型是second(双a1[],双a2[])
。我认为double*
导致了与double[]的冲突
。这是错的吗?@MaxMackie类型为double[]
的函数参数与类型为double*
的参数是一样的。我认为问题在于您认为(*mat)[0]
是第一行,但实际上它是第一行的第一个元素。第一行是*mat
或mat[0]
.Ahhh,我还以为你必须取消对mat
指针的引用才能到达第一行。这更有意义。谢谢你填补了空白!