СИ, функции и двухмерные массивы

Я создал 2 функции по заполнению и выводу массива, но что то не работает, подскажите в чем проблема, я просто новичок в СИ

#include <stdio.h>
void create_mas(int **array,int i,int j) {
    int b = 0;
    for (int k = 0; k < i; ++k) {
        for (int l = 0; l < j; ++l) {
            b++;
            array[k][l] = b;
        }
    }
    return 0;

}
void  show_array(int **array, int i, int j) {
    for (int k = 0; k < i; k++) {
        for (int l = 0; l < j; l++) {
            printf("%d", k);
            printf("%d\t", array[k][l]);
            
        }
        printf("\n");
    }
    return 0;

}
int mas[4][4];
int main() {
    
    create_mas(mas,4, 4);
    show_array(mas,4,4);
}


Ответы (1 шт):

Автор решения: Harry

Надо либо использовать динамический двумерный массив, что-то типа следующего кода для массива NxM:

int** a = (int **) calloc(N, sizeof(int *));
for (int i = 0; i < N; i++) a[i] = (int *) calloc(M, sizeof(int));

и тогда можно передавать его в функцию func(int**). Потом только надо не забыть освободить выделенную память,

for (int i = 0; i < N; i++) free(a[i]);
free(a);

Либо передавать в функцию матрицу

void show_array(int a[][4]);

и тогда ваш код будет работать.

Либо передавать

void show_array(int *a);

и обращаться к элементу a[i][j] как к

*(a+4*i+j)

Смотрите сами, какой из трех вариантов вам удобнее.

→ Ссылка