Передача двумерного массива в функцию - 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
- Выводим значения двумерного массива
- Выбираем случайный элемент двумерного массива и выводим его значение
- Освобождаем память, выделенную под двумерный массив
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д