Передача двумерного массива в функцию - C (СИ) (71842)
Формулировка задачи:
Есть двумерный массив и его необходимо вывести на экран, делать это придется часто, так что вывод массива доверяю отдельной функции. Получается вот такая конструкция:
компилятор ругается на
error: subscripted value is neither array nor pointer nor vector
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]);
Решение задачи: «Передача двумерного массива в функцию»
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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию fill_row, которая заполняет одномерный массив случайными числами от 0 до 9
- Определяем функцию fill_matrix, которая заполняет двумерный массив, используя функцию fill_row
- Определяем функцию dump_row, которая выводит значения одномерного массива через пробел или перенос строки
- Определяем функцию dump_matrix, которая выводит значения двумерного массива, используя функцию dump_row
- Определяем функцию matrix_alloc, которая выделяет память под двумерный массив и проверяет корректность выделения памяти
- Определяем функцию matrix_destroy, которая освобождает память, выделенную под двумерный массив
- В функции main считываем количество строк и столбцов двумерного массива
- Выделяем память под двумерный массив
- Заполняем двумерный массив случайными числами от 0 до 9
- Выводим значения двумерного массива
- Выбираем случайный элемент двумерного массива и выводим его значение
- Освобождаем память, выделенную под двумерный массив
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д