Итак, я хотел бы сохранить пару матриц в массиве. Я так понимаю, вы можете создать трехмерный массив. Я хочу иметь возможность хранить матрицы, полученные из метода AndMatrix, в массиве, а затем использовать их, когда мне нужно. Мой код ниже. Переменная arrayOfMatrices - это трехмерный массив, который я уже инициализировал. Может ли кто-нибудь объяснить также, как я могу получить доступ к этим матрицам в массиве. Мой код ниже:

int** AndMatrix(int **original,int **matA, int **matB, int row, int column){
     int** result=calloc(row, sizeof(int*));
      for (int i = 0; i < row; i++) {
            result[i] = calloc(column, sizeof(int)); }

        return result;}
char temps[10][rows][columns];
arrayOfMatrices[countForMatrices] = AndMatrix(matrix,matrix1, matrix2, rows,columns);
1
Julian Romero 8 Дек 2020 в 14:59

1 ответ

Лучший ответ

Объявить массив двойных указателей:

int **arrayOfMatrices[total_matrices];

Или

int ***arrayOfMatrices = malloc(100 * sizeof(int**));

Чтобы получить доступ к матрицам, хранящимся в массиве, вы делаете это так же, как и для доступа к заданному элементу из массива 1D, а именно:

arrayOfMatrices[0]

Для доступа к матрице, хранящейся в нулевой позиции массива, arrayOfMatrices[1] аксессуары к матрице из первой позиции и так далее.

Рабочий пример:

#include <stdio.h>
#include <stdlib.h>

int** AndMatrix(int row, int column){
     int** result = calloc(row, sizeof(int*));
     for (int i = 0; i < row; i++) 
            result[i] = calloc(column, sizeof(int)); 
     return result;
}


int main() {
    
    int ***arrayOfMatrices = malloc(sizeof(int**) * 100);
    int row_matrix1 = 10;
    int col_matrix1 = 10;
    arrayOfMatrices[0] = AndMatrix(row_matrix1, col_matrix1);
    int **first_matrix = arrayOfMatrices[0];
    
    // Fill up the matrix with some values
    for(int i = 0; i < row_matrix1; i++)
     for(int j = 0; j < col_matrix1; j++)
         first_matrix[i][j] = i * j;
 
    for(int i = 0; i < row_matrix1; i++){
     for(int j = 0; j < col_matrix1; j++)
         printf("%d ", first_matrix[i][j]);
     printf("\n");
    }
    
    // free the memory accordingly.
    
    return 0;
}
  
1
dreamcrash 10 Дек 2020 в 09:19