Выделите память для 2d массива для печати матрицы, используя функции, в C89 - PullRequest
0 голосов
/ 20 октября 2018

Здравствуйте, мне пришлось написать программу (ну, еще есть), которая бы выделяла память в функции для хранения чисел, которые вы должны ввести, а затем печатать матрицу (строки и столбцы имеют одинаковый размер).Самое главное, чтобы программа была написана с использованием указателей, локальных переменных, функций и стандарта C 89.

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

    void Matrix_Input(int *m, int ***Matrix);
    void Matrix_Output(int m, int **Matrix);

    int main()
    {
        int m;
        int **Matrix;
        int i;
        Matrix_Input(&m, &Matrix);
        Matrix_Output(m, Matrix);

        for (i = 0; i < m; i++) /*free memory*/
            free(*(Matrix+i));
        free(Matrix);
        return 0;
    }
    void Matrix_Input(int *m, int ***Matrix)
    {
        int i, j;
        printf("Input number of rows/columns: \n");
        scanf("%d", m);
        *Matrix = malloc(*m* sizeof(int*)); /*allocate memory*/
        for (i = 0; i < *m; i++)
            *(*Matrix+i) = malloc(*m* sizeof(int));
        printf("Input integers: \n");
        for (i = 0; i < *m; i++)
            for (j = 0; j < *m; j++)
                scanf("%d", &((*Matrix)[i][j]));
    }
    void Matrix_Output(int m, int **Matrix)
    {
        int i, j;
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < m; j++)
                printf("%5d", Matrix[i][j]);
        printf("\n");
        }
    }

Программа работает нормально, но меня попросили не использовать тройные указатели здесь (для функции ввода):

    void Matrix_Input(int *m, int ***Matrix)

Учитель сказал мне использовать двойные указатели для функции ввода, как я это делал для вывода:

    void Matrix_Input(int *m, int **Matrix)

И здесь все идет не так, потому что я знаю только каквыделить с помощью тройных указателей.Я должен оставить ввод как отдельную функцию, не могу поместить его в main.

Может кто-нибудь помочь мне?Пожалуйста.

1 Ответ

0 голосов
/ 20 октября 2018

Вместо этого верните указатель матрицы.Это выход для функции, а не реальный вход.

int** Matrix_Input(int* n) 
...