Передача двумерного массива в функцию - C (СИ) (71842)

Узнай цену своей работы

Формулировка задачи:

Есть двумерный массив и его необходимо вывести на экран, делать это придется часто, так что вывод массива доверяю отдельной функции. Получается вот такая конструкция:
void printmatrix(int *massive)
    {
        int i, j;
        for (i=0; i<3; i++)
        {
            printf("\n");
            for (j=0; j<3; j++)
            {
            printf("%i", massive[i][j]);
            }
        }
    }
 
int main()
{
        int pole[3][3];
        ......
        printmatrix(*pole);
    return 0;
}
компилятор ругается на
printf("%i", massive[i][j]);
error: subscripted value is neither array nor pointer nor vector

Решение задачи: «Передача двумерного массива в функцию»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
 
void fill_row(int * row, size_t size) {
    while ( size-- )
        *row++ = rand() % 10;
}
 
void fill_matrix(int ** matrix, size_t rows, size_t columns) {
    while ( rows-- )
        fill_row(*matrix++, columns);
}
 
void dump_row(const int * row, size_t size) {
    while ( size-- )
        printf("%d%c", *row++, ( size ) ? ' ' : '\n');
}
 
void dump_matrix(int ** matrix, size_t rows, size_t columns) {
    while ( rows-- )
        dump_row(*matrix++, columns);
}
 
int ** matrix_alloc(size_t rows, size_t columns) {
    size_t row;
    int ** matrix = malloc(sizeof(int*) * rows);
    
    if ( ! matrix )
        return NULL;
    
    for ( row = 0; row < rows; ++row ) {
        if ( ! ( matrix[row] = malloc(sizeof(int) * columns) ) ) {
            while ( row )
                free(matrix[--row]);
            free(matrix);
            return NULL;
        }
    }
    
    return matrix;
}
 
void matrix_destroy(int ** matrix, size_t rows) {
    size_t row;
    
    for ( row = 0; row < rows; ++row )
        free(matrix[row]);
    
    free(matrix);
}
 
int main(void) {
    int ** matrix;
    size_t rows, columns, r, c;
    
    srand(time(NULL));
    
    printf("Space separated rows and columns: ");
    if ( scanf("%lu%lu", &rows, &columns) != 2 || ! rows || ! columns ) {
        fprintf(stderr, "Input error!\n");
        return 1;
    }
    
    matrix = matrix_alloc(rows, columns);
    assert(matrix);
    
    fill_matrix(matrix, rows, columns);
    printf("Matrix:\n");
    dump_matrix(matrix, rows, columns);
    
    r = rand() % rows;
    c = rand() % columns;
    printf("Matrix[%lu][%lu] = %d\n", r, c, matrix[r][c]);
    
    matrix_destroy(matrix, rows);
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем функцию fill_row, которая заполняет одномерный массив случайными числами от 0 до 9
  3. Определяем функцию fill_matrix, которая заполняет двумерный массив, используя функцию fill_row
  4. Определяем функцию dump_row, которая выводит значения одномерного массива через пробел или перенос строки
  5. Определяем функцию dump_matrix, которая выводит значения двумерного массива, используя функцию dump_row
  6. Определяем функцию matrix_alloc, которая выделяет память под двумерный массив и проверяет корректность выделения памяти
  7. Определяем функцию matrix_destroy, которая освобождает память, выделенную под двумерный массив
  8. В функции main считываем количество строк и столбцов двумерного массива
  9. Выделяем память под двумерный массив
  10. Заполняем двумерный массив случайными числами от 0 до 9
  11. Выводим значения двумерного массива
  12. Выбираем случайный элемент двумерного массива и выводим его значение
  13. Освобождаем память, выделенную под двумерный массив
  14. Завершаем программу

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


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

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

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