Я новичок в C, и у меня есть некоторые проблемы с программированием функции, которая будет брать две матрицы, складывать их и возвращать результат в качестве третьей матрицы. Основная проблема заключается в том, чтобы заставить функцию возвращать массив .
В Интернете я нашел несколько решений о том, как вернуть массив, возвращая указатель на первый элемент массива, но не смог применить его к моей ситуации с двумерным массивом. Я знаю, как добавить матрицы в основную функцию, но мне нужно разбить программу на несколько функций.
Вот мой код
float matrix_add(float matrixA[MAX_SIZE][MAX_SIZE], float matrixB[MAX_SIZE][MAX_SIZE], int column, int line)
{
float matrixRes[MAX_SIZE][MAX_SIZE];
for (int i=0; i<column; i++)
{
for (int j=0; j<line; j++)
{
matrixRes[i][j]=matrixA[i][j]+matrixB[i][j];
}
}
return matrixRes;
}
Я попробовал одно из решений, которое нашел в Интернете:
float *matrix_add(float matrixA[MAX_SIZE][MAX_SIZE], float matrixB[MAX_SIZE][MAX_SIZE], int column, int line)
{
static float *matrixRes[MAX_SIZE][MAX_SIZE];
for (int i=0; i<column; i++)
{
for (int j=0; j<line; j++)
{
*matrixRes[i][j]=matrixA[i][j]+matrixB[i][j];
}
}
return matrixRes;
Но есть несколько проблем с этим - я не понимаю этого, и функция все еще не работает - она возвращает ложные результаты, и в компиляторе есть предупреждение «возврат из несовместимого типа указателя».
Кроме того, я не уверен, как это назвать (возможно, это проблема с решением, которое я нашел?). Я хотел получить какое-то конкретное значение из массива и вызвал такую функцию
matrix_add(matrixA, matrixB, column, line)[value][value]);
Где matrixA и B - некоторые двумерные массивы, столбец и строка - целочисленные переменные. Это возвращает ошибку (подписанное значение не является ни массивом, ни указателем, ни вектором)
Можете ли вы указать мне правильное направление и сказать, как заставить эту функцию работать (и объяснить решение)? MAX_SIZE - это предопределенное значение (10), так как в этом назначении я должен использовать статическое выделение памяти (но если вы можете помочь мне с помощью динамического выделения, это нормально)
Основная функция выглядит следующим образом
int main()
{
int column_num[2], line_num[2];
float matrixA[MAX_SIZE][MAX_SIZE], matrixB[MAX_SIZE][MAX_SIZE];
scanf("%d", &column_num[0]);
scanf("%d", &line_num[0]);
matrix_load_val(matrixA, column_num[0], line_num[0]);
scanf("%d", &column_num[1]);
scanf("%d", &line_num[1]);
matrix_load_val(matrixB, column_num[1], line_num[1]);
}
for (int i=0; i<column_num[0]; i++)
{
for(int j=0; j<line_num[0]; j++)
{
printf("%0.5g\n", matrix_add(matrixA, matrixB, i, j));
}
}
matrix_load_val - это процедура, которая запрашивает у пользователя значения и помещает их в результирующую матрицу (она работает точно, проверено)