Замените ваши объявления функций следующим образом:
void input_arr(int *arr[], int n, int m)
void print_arr(int *arr[], int n, int m)
Где бы вы ни вызывали scanf
и printf
для элементов массива, используйте это:
scanf("%d", arr + i * m + j);
printf("%d", *(arr + i * m + j));
Для хорошей практики , освободи память, когда закончишь. Добавьте это в конце вашего main()
:
free(arr);
Кроме того, если у вас есть компилятор C99 или новее, вы можете использовать массивы переменной длины , чтобы выполнить работу и позволить индексировать массив с помощью arr[i][j]
вместо уродливого arr + i * m + j
.
#include <stdio.h>
#include <stdlib.h>
//note that the arr parameter must be declared AFTER the m parameter since it uses its information
void input_arr(int n, int m, int arr[][m]);
void print_arr(int n, int m, int arr[][m]);
int main(void)
{
int n, m;
printf("Insert line of array: ");
scanf("%d", &n);
printf("Insert column of array: ");
scanf("%d", &m);
int arr[n][m];
input_arr(n, m, arr);
print_arr(n, m, arr); //I am assuming you also want to print the array
//return 0; //not needed in C99
}
void input_arr(int n, int m, int arr[][m])
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("Insert element in line %d and column %d: ", i, j);
scanf("%d", &arr[i][j]);
}
}
}
void print_arr(int n, int m, int arr[][m])
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%d ", arr[i][j]);
}
//you probably want a new line here to display it as a matrix
printf("\n");
}
}