У меня есть основная функция, которая устанавливает следующие переменные:
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];
То, что вы пытаетесь сделать, это:
Затем я пытаюсь передать все три указателя на другую функцию. Эта другая функция будет перебирать строки матрицы (только строки, она не посещает все пространство матрицы), выполнить вычисление с использованием строки (в виде массива). Конечным результатом являются две пустые массивы, объявленные в начале, и каждая из них становится одной строкой из матрицы.
Вот прототип второй функции:
void smallestSum(double (*mat)[size], int num, double *first, double *second)
Эта функция проходит через каждую комбинацию строк матрицы (0/1, 0/2, 1/2) и проверяет суммы их значений. Два массива, производящие наименьшую сумму, в конечном итоге становятся result1
и result2
сверху.
Поскольку это первый раз, когда я действительно вникаю в область указателя/массива/матрицы, у меня есть несколько вопросов:
smallestSum()
я могу перебирать массив, как обычно (используя for (int я = 0; я < 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[]
.
double *
как если бы оно было double[]
. Чтобы получить доступ к ячейке в матрице, вы можете написать mat[i][j]
( i
- индекс строки, а j
- индекс столбца).
Ответ abacabadabacaba дал в основном правильный, за исключением того, что size
не обязательно должен быть известен во время компиляции. Если вы включите size
в качестве параметра в функцию, вы можете использовать его как часть типа для других параметров для этой функции:
void smallestSum(int size, double (*mat)[size], int num, double *first, double *second)
vector<vector<double>>
чтобы перейти к вашей функции,vector<vector<double>>& v
voila!