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

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

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

Есть двумерный массив и его необходимо вывести на экран, делать это придется часто, так что вывод массива доверяю отдельной функции. Получается вот такая конструкция:
Листинг программы
  1. void printmatrix(int *massive)
  2. {
  3. int i, j;
  4. for (i=0; i<3; i++)
  5. {
  6. printf("\n");
  7. for (j=0; j<3; j++)
  8. {
  9. printf("%i", massive[i][j]);
  10. }
  11. }
  12. }
  13. int main()
  14. {
  15. int pole[3][3];
  16. ......
  17. printmatrix(*pole);
  18. return 0;
  19. }
компилятор ругается на
Листинг программы
  1. printf("%i", massive[i][j]);
error: subscripted value is neither array nor pointer nor vector

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <assert.h>
  5.  
  6. void fill_row(int * row, size_t size) {
  7.     while ( size-- )
  8.         *row++ = rand() % 10;
  9. }
  10.  
  11. void fill_matrix(int ** matrix, size_t rows, size_t columns) {
  12.     while ( rows-- )
  13.         fill_row(*matrix++, columns);
  14. }
  15.  
  16. void dump_row(const int * row, size_t size) {
  17.     while ( size-- )
  18.         printf("%d%c", *row++, ( size ) ? ' ' : '\n');
  19. }
  20.  
  21. void dump_matrix(int ** matrix, size_t rows, size_t columns) {
  22.     while ( rows-- )
  23.         dump_row(*matrix++, columns);
  24. }
  25.  
  26. int ** matrix_alloc(size_t rows, size_t columns) {
  27.     size_t row;
  28.     int ** matrix = malloc(sizeof(int*) * rows);
  29.    
  30.     if ( ! matrix )
  31.         return NULL;
  32.    
  33.     for ( row = 0; row < rows; ++row ) {
  34.         if ( ! ( matrix[row] = malloc(sizeof(int) * columns) ) ) {
  35.             while ( row )
  36.                 free(matrix[--row]);
  37.             free(matrix);
  38.             return NULL;
  39.         }
  40.     }
  41.    
  42.     return matrix;
  43. }
  44.  
  45. void matrix_destroy(int ** matrix, size_t rows) {
  46.     size_t row;
  47.    
  48.     for ( row = 0; row < rows; ++row )
  49.         free(matrix[row]);
  50.    
  51.     free(matrix);
  52. }
  53.  
  54. int main(void) {
  55.     int ** matrix;
  56.     size_t rows, columns, r, c;
  57.    
  58.     srand(time(NULL));
  59.    
  60.     printf("Space separated rows and columns: ");
  61.     if ( scanf("%lu%lu", &rows, &columns) != 2 || ! rows || ! columns ) {
  62.         fprintf(stderr, "Input error!\n");
  63.         return 1;
  64.     }
  65.    
  66.     matrix = matrix_alloc(rows, columns);
  67.     assert(matrix);
  68.    
  69.     fill_matrix(matrix, rows, columns);
  70.     printf("Matrix:\n");
  71.     dump_matrix(matrix, rows, columns);
  72.    
  73.     r = rand() % rows;
  74.     c = rand() % columns;
  75.     printf("Matrix[%lu][%lu] = %d\n", r, c, matrix[r][c]);
  76.    
  77.     matrix_destroy(matrix, rows);
  78.     return 0;
  79. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы