Передача двумерного динамического массива в функцию через указатель - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д