Передача двумерного динамического массива в функцию через указатель - C (СИ)
Формулировка задачи:
Всем привет! Собственно сабж. Я почитал о том, как это делать, но слишком много случаев показано именно для c++ и без вывода этого массива на экран. (т.к. я новичок, извините если пример именно такого типа уже разжёвывали)
Программа должна создавать двумерный массив заданной размерности и в дальнейшем принять от пользователя значения для каждой ячейки. Потом должна происходить передача двумерного массива в функцию с помощью указателя и выводить на экран вбитые значения массива. Я сделал так:
Но программа вылетает с ошибкой после задания значений ячеек массива. Для меня очевидно, что я где-то ошибся, но не знаю где. Помогите пожалуйста)
#include <stdio.h> #include <math.h> int f1(int **b,int x,int y,int i, int j) { for (i=0;i<x;i++) { for (j=0;j<y;j++) { printf("a[%d][%d]=%d\n",i,j,**b); } } return(0); } int main() { int i,j,k,x,y,n1,*b; printf ("strok\n"); scanf ("%d",&y); printf ("stolbcov\n"); scanf ("%d",&x); int a[x][y]; for (i=0;i<x;i++) { for (j=0;j<y;j++) { printf("vvedite chislo a[%d][%d]\n",i,j); scanf("%d",&a[i][j]); } } b=&a[0][0]; n1=f1(*b,x,y,0,0); }
Решение задачи: «Передача двумерного динамического массива в функцию через указатель»
textual
Листинг программы
#include <stdio.h> int f1(int *b, int x, int y) { int i, j; for (i = 0; i < x; ++i){ for (j = 0; j < y; ++j) printf("%6d", *(b + i * y + j)); printf("\n"); } return(0); } int main() { int i , j, x, y, *b; printf ("strok\n"); scanf ("%d",&y); printf ("stolbcov\n"); scanf ("%d", &x); int a[x][y]; for (i = 0; i < x; i++){ for (j = 0; j < y; j++){ printf("vvedite chislo a[%d][%d]\n",i,j); scanf("%d",&a[i][j]); } } b = &a[0][0]; f1(b,x,y); }
Объяснение кода листинга программы
- Объявление функции
f1
, которая принимает три аргумента: указательb
на массив, целые числаx
иy
. - Внутри функции
f1
объявление двух переменныхi
иj
, которые будут использоваться в циклах. - Инициализация значений переменных
i
иj
в начале циклов. - Два вложенных цикла, которые будут выполняться столько раз, сколько указано в аргументах
x
иy
. - Внутри вложенных циклов происходит вывод значения элемента массива, на который указывает аргумент
b + i * y + j
, с форматированием в шестом формате. - После окончания вложенных циклов выполняется перевод строки.
- В конце функции
f1
возвращается значение 0, что означает успешное выполнение. - В функции
main
объявление пяти переменных:i
,j
,x
,y
и указательb
. - С помощью функции
scanf
пользователю предлагается ввести значение для переменнойy
, а затем для переменнойx
. - Создание двумерного массива
a
с помощью циклаfor
, в котором пользователь вводит значения для каждого элемента массива. - Инициализация указателя
b
с адресом первого элемента массиваa
. - Вызов функции
f1
с передачей аргументовb
,x
иy
. - Конец функции
main
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д