main 함수에서 정의된 배열을 다른 함수에서 접근하는 법

yjjo8136 Reply 3 years 50 weeks ago
196985번 제출에서 main 함수에서 정의한 2차원 배열을 neighbor 함수에서 사용할 수 있도록 하고 싶습니다. neighbor함수에서 main 함수에 정의된 배열 값을 이용하여 if문 조건 비교를 하고싶습니다. 포인터 같이 아직 안배운 개념이 필요하다면 안배운 개념을 사용해서 설명해주셔도 감사하겠습니다.
withcs2 Reply 3 years 50 weeks ago
이차원 배열은 실제로는 일차원 배열이 들어 있는 일차원배열입니다. 그렇게 사용하면 존재하지 않는 값을 불러오려고 하여 런타임에러가 발생합니다 접근하는 방법은 1. n을 전역변수로 만들어두고 neighbor를 int array[][n] 로 선언하는 방법 1-1. n을 전역변수로 만들어두고 neighbor를 int (*array)[n]로 선언하는 방법 2. neighbor에 &arr로 전달하고 array[i][j]를 *(array+i*m+j)로 계산하는 방법 3. 이차원 배열 선언 할 때 int** array 로 선언하고 neighbor에도 int **array로 전달하는 방법 4. 전역변수로 array[1000][1000] 선언해버리고 m, n까지만 계산하는 방법 (main 함수 밖에 선언하는 것)
withcs2 Reply 3 years 50 weeks ago
#include<stdio.h> void print_array(int m,int n,int* array){ for (int i=1;i<=m;i++){ for (int j=1;j<=n;j++){ printf("%d ",*(array+i*m+j)); } printf("\n"); } } int main(){ int n,m,g; scanf("%d %d %d",&n,&m,&g); int arr[m+1][n+1]; int i,j; for (i=1;i<=m;i++){ for (j=1;j<=n;j++){ scanf("%d",&arr[i][j]); } } print_array(m,n,&arr); }