Нужно сделать так,чтобы можно было передавать в функцию и статическую, и динамическую матрицы(си)
Есть такое определение функции
void input(int **matrix, int n, int m)
Но оно работает только для динамических матриц. Как можно было бы изменить,чтобы работало и для статических и динамических? Или что можно сделать со статической матрицой но притом,чтобы она оставалась статической.
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Можно сделать подделку. Динамическую матрицу, указывающую на строки статической.
// $ gcc -Wall -std=c11 -Wextra -Wpedantic dynmat.c -o dynmat && ./dynmat
void input(int **matrix, int n, int m) {
matrix[3][3] = 777 ;
}
# include <stdlib.h>
# include <stdio.h>
int main(){
int n = 7 ;
int m = 8 ;
int static_matr [n][m];
static_matr[3][3] = 888 ;
printf("0. static_matr[3][3] = %d\n",static_matr[3][3]);
int * * dynamic_matr = malloc ( sizeof (int * ) * n ) ;
for ( int i = 0 ; i < n ; ++ i )
dynamic_matr [ i ] = static_matr [ i ] ;
input ( dynamic_matr , n , m ) ;
free ( dynamic_matr ) ;
printf("1. static_matr[3][3] = %d\n",static_matr[3][3]);
}
Проверка :
0. static_matr[3][3] = 888
1. static_matr[3][3] = 777
Дополнительную память будет занимать чуть больше n*m+n вместо n*m. И установка указателей на статическую матрицу займёт мало времени n.