Кажется, что ваша матрица является динамической c (количество строк и столбцов не фиксировано). На языке C вы не можете объявлять массив массива с динамическими c строками и столбцами, потому что компилятор не знает, как выделить для вас объем памяти. Вы должны будете выделить память во время выполнения. В моем примере матрица хранится в памяти как первая строка, вторая строка и так далее. В математике доступ к элементу матрицы осуществляется по индексу строки и индексу столбца. «Индекс строки и индекс столбца» переводится в адрес памяти элемента с использованием начального адреса выделенной памяти + номер строки * номер столбца + индекс столбца на основе того, как матрица хранится в моем примере. Примечание: номер строки и номер столбца начинаются с нуля. Первый элемент обозначен p, где p + 0 * columncount + 0) равно p. Следующий элемент обозначается как p + 0 * columncount + 1. После этого элемент второй строки и второго столбца (2,2) обозначается как p + 1 * количество столбцов + 1. В следующем примере используется один указатель для представления матрицы Dynami c (Другой метод существует, например, массив указателей)
В моем примере создается матрица 3 (три строки) на 4 (четыре столбца) и инициализирован. Функция ProcessMatrix отображает сумму каждой строки.
Если возможно, я рекомендую вам использовать C ++, который позволяет выделять память с размером, заданным значением одного целого числа, что упрощает работу. Если у вас есть доступ к другим математическим библиотекам (многие доступны), вы должны использовать их, а не пытаться изобретать колесо.
// c_matrix.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <stdio.h>
int GetElementValue(int* m, int rowIndex, int colIndex, int columnCount)
{
return *(m + (rowIndex * columnCount + colIndex));
}
void ProcessMatric(int* myMatrix, int rowcount, int colcount)
{
// calculate the sum of each row
int sum = 0;
for (int i = 0; i < rowcount; i++)
{
sum = 0;
for (int j = 0; j < colcount; j++)
{
sum = sum + GetElementValue(myMatrix, i, j, colcount);
}
printf("Sum of row %d=%d\r\n", i+1, sum);
}
}
int main()
{
int row = 3;
int col = 4;
int* matrix;
//create the memory for the matrix 3 by 4.
matrix = malloc(sizeof(int) * row * col);
// in momery the matrix is stored as (row1,col1), (row1, col2), (row1,col3)...(row4,col1),(row4,col2),(row4, col3)
// initialize the matrix as 0,1,2,3...11
for (int i = 0; i < row * col; ++i)
{
*(matrix + i) = i;
}
ProcessMatric(matrix, row, col);
free(matrix);
return 0;
}