Инициализация двумерного массива в функции типа 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;
}

Объяснение кода листинга программы

  1. Объявлены функции:
    • input(int *n, int *m)
    • initializatoin_remember(int **&rememberX, int n)
  2. В функции main() объявлены переменные:
    • n
    • m
    • rememberX
  3. В функции main() вызваны функции:
    • input(&n, &m)
    • initializatoin_remember(rememberX, n)
  4. В функции input(int *n, int *m) происходит запрос на ввод количества строк и сохранение значения в переменной n. Затем значение n используется для вычисления количества столбцов, которые равны n + 1, и сохраняются в переменной m.
  5. В функции initializatoin_remember(int **&rememberX, int n) происходит выделение памяти под двумерный массив с помощью malloc(). Для каждой строки массива выделяется память под два целочисленных значения. Затем значения по умолчанию равные 0 устанавливаются для всех элементов массива, кроме последнего.
  6. В функции main() не происходит ничего, кроме вызова указанных выше функций и вывода значения getch().
  7. Значения переменных n и m передаются в функцию input() по ссылке, что позволяет изменять их значения внутри функции.
  8. Переменная rememberX объявлена как указатель на указатель на целочисленное значение, что позволяет выделять память под двумерный массив.
  9. В функции initializatoin_remember() используется оператор & для передачи адреса переменной rememberX в качестве аргумента, что позволяет изменять значение указателя внутри функции.
  10. Для освобождения памяти, выделенной под массив, следует вызвать функцию free().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы