#arrays #c #xcode #matrix #2d
#массивы #c #xcode #матрица #2d
Вопрос:
Я новичок в C, я хотел бы задать вопрос об использовании функций в C.
Мне нужно создать две функции, первую для создания 2D-массива, а вторую для его печати. Я использую файл с именем matrix.c, заголовок с именем matrix .h и основной файл.
Основной файл выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include "matrices.h"
int main() {
int m, n;
printf("Insert rows and colums of matrix A: ");
scanf("%d%d", amp;m,amp;n);
printf("Insert elements of the first matrix An");
int A[m][n];
A[m][n] = **create(m, n);
display(m, n, A[m][n]);
return 0;
}
Файл matrix.c:
#include "matrices.h"
#include <stdlib.h>
#include <stdio.h>
int **create(int m, int n){
int **A = (int **) malloc (sizeof(int *)*m);
for (int i = 0; i < m; i ){
A[i]=(int *)malloc(sizeof(int)*n);
for (int j = 0; j < n; j ){
printf("Element ");printf("%d", i 1);printf("%d", j 1);printf(":");
scanf("%d",amp;A[i][j]);
}
}
return A;
}
void display(int m, int n, int A[m][n]){
for (size_t i = 0; i < m; i ){
for (size_t j = 0; j < n; j ){
printf("%d ", A[i][j]);
}
printf("n");
}
}
Наконец, файл matrix.h выглядит следующим образом:
#ifndef matrices_h
#define matrices_h
#include <stdio.h>
int **create(int m, int n);
void display(int m, int n, int A[m][n]);
#endif
Ошибка, которую возвращает мой компилятор, связана со строкой
display(m, n, A[m][n]);
в основном файле. В нем говорится: поток 1: EXC_BAD_ACCESS (code = 1, address= 0x7ffe0000001a).
Более того, у меня есть еще одно предупреждение:
Несовместимое преобразование целого числа в указатель, передающее ‘int’ в параметр типа ‘int ( *)[ * ]’
(в той же строке).
Я благодарю всех, кто будет достаточно любезен, чтобы помочь мне 🙂
Ответ №1:
Вы не выделяете 2D-массив. Вы создаете одномерный массив указателей, а затем каждый из них указывает на одномерный массив int . Поэтому вы должны изменить код, чтобы использовать этот тип «double int pointer» повсюду.
Нравится:
int A[m][n]; --> int **A;
A[m][n] = **create(m, n); --> A = create(m, n);
display(m, n, A[m][n]); --> display(m, n, A);
и
void display(int m, int n, int A[m][n]){ --> void display(int m, int n, int** A){