Инициализация двумерного массива в функции типа void - C (СИ)
Формулировка задачи:
void input(int *n, int *m); void initializatoin_remember(int ***rememberX, int n); int main() { int n, m; int **rememberX; input(&n, &m); initializatoin_remember(&rememberX, n); getch(); } void input(int *n, int *m) { printf("\nInput counts raws\n"); scanf("%d", n); *m = *n + 1; } void initializatoin_remember(int ***rememberX, int n) { int i, z; *rememberX = (int**)malloc((n - 1) * sizeof(int*)); for (i = 0; i < n; i++) *rememberX[i] = (int*)malloc(2 * sizeof(int));//выдаёт ошибку в процессе исполнения программы //пробовал и так: *(rememberX[i]) = (int*)malloc(2 * sizeof(int)); но не помогло for (i = 0; i < n - 1; i++) for (z = 0; z<2; z++) *rememberX[i][z] = 0; }
Решение задачи: «Инициализация двумерного массива в функции типа void»
textual
Листинг программы
void input(int *n, int *m); void initializatoin_remember(int **&rememberX, int n); int main() { int n, m; int **rememberX; input(&n, &m); initializatoin_remember(rememberX, n); getch(); } void input(int *n, int *m) { printf("\nInput counts raws\n"); scanf("%d", n); *m = *n + 1; } void initializatoin_remember(int **&rememberX, int n) { int i, z; rememberX = (int**)malloc(n*sizeof(int)); for (i = 0; i < n; i++) rememberX[i] = (int*)malloc(2*sizeof(int)); for (i = 0; i < n - 1; i++) for (z = 0; z<2; z++) rememberX[i][z] = 0; }
Объяснение кода листинга программы
- Объявлены функции:
input(int *n, int *m)
initializatoin_remember(int **&rememberX, int n)
- В функции
main()
объявлены переменные:n
m
rememberX
- В функции
main()
вызваны функции:input(&n, &m)
initializatoin_remember(rememberX, n)
- В функции
input(int *n, int *m)
происходит запрос на ввод количества строк и сохранение значения в переменнойn
. Затем значениеn
используется для вычисления количества столбцов, которые равныn + 1
, и сохраняются в переменнойm
. - В функции
initializatoin_remember(int **&rememberX, int n)
происходит выделение памяти под двумерный массив с помощьюmalloc()
. Для каждой строки массива выделяется память под два целочисленных значения. Затем значения по умолчанию равные 0 устанавливаются для всех элементов массива, кроме последнего. - В функции
main()
не происходит ничего, кроме вызова указанных выше функций и вывода значенияgetch()
. - Значения переменных
n
иm
передаются в функциюinput()
по ссылке, что позволяет изменять их значения внутри функции. - Переменная
rememberX
объявлена как указатель на указатель на целочисленное значение, что позволяет выделять память под двумерный массив. - В функции
initializatoin_remember()
используется оператор&
для передачи адреса переменнойrememberX
в качестве аргумента, что позволяет изменять значение указателя внутри функции. - Для освобождения памяти, выделенной под массив, следует вызвать функцию
free()
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д