Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将指向数组数组的指针传递给函数_C++_C_Arrays_Pointers_Matrix - Fatal编程技术网

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
指针的引用才能到达第一行。这更有意义。谢谢你填补了空白!