[C] 2차원 배열의 포인터
C언어에서 2차원 배열에서 포인터를 어떻게 사용할 수 있을까?
int a[3][4]
위와 같이 2차원 배열을 선언했다면, 함수에서 사용하기 위해 어떻게 전달해야할까?
2차원 배열의 포인터 사용하기
void func(int* p) {
return;
}
int main () {
int a[4];
func(a);
return 0;
}
1차원에서는 위와 같이 선언할 수 있었다.
그런데 트리나 그래프를 C에서 구현하기 위해서는 2차원 배열을 선언할 필요가 있는데,
함수를 사용하기 위해서 배열에 대한 주소, 즉 포인터를 전달해야한다.
2차원에 대해서는 어떻게 사용할 수 있을까?
void func(int(*p)[4]) {
return;
}
void dummy(int** p) {
return;
}
int main () {
int a[3][4];
func(a);
int* p[5]; // 포인터 배열 5개 선언
dummy(p); // p = &p[0]를 전달함. 즉, 더블 포인터형태임. (p[0]가 포인터이므로 포인터의 포인터를 전달.)
return 0;
}
위와 같은 예로 사용할 수 있다.
넘겨주는 함수에서 int (*p)[열의 개수] 형태로 변수를 받으면 된다.
주의할 사항은 꼭 (*p) 형태로 *p를 괄호 안에 넣어줘야 한다는 것이다.
int* p[n]라고 쓰게 되면 포인터 변수를 n개 선언하겠다는 뜻 이므로 혼동하지 않도록 해야한다.
생각해보니, 정보처리기사 필기에도 나와있는 내용이다.
사용 예시
void fun1(int (*p)[3]);
void fun2(int (*p)[8]);
void fun3(double (*p)[8]);
void fun4(char (*p)[200]);
void fun5(char (*p)[20]);
int main() {
int a[2][3];
int b[4][8];
int c[100][3];
double d[3][3];
char e[10][200];
double f[100][3];
char g[10][20];
////////////함수 호출 형태//////////////////
fun1(a);
fun2(b);
fun1(c);
fun3(d);
fun4(e);
fun3(f);
fun5(g);
return 0;
}
//////////함수 작성 형태///////////
void fun1(int (*p)[3]) {
printf("열이 3개씩 점프하는 int 배열 함수 호출");
return;
}
void fun2(int (*p)[8]) {
printf("열이 8개씩 점프하는 int 배열 함수 호출");
return;
}
void fun3(double (*p)[3]) {
printf("열이 3개씩 점프하는 double 배열 함수 호출");
return;
}
void fun4(char (*p)[200]) {
printf("열이 200개씩 점프하는 char 배열 함수 호출");
return;
}
void fun5(char (*p)[20]) {
printf("열이 20개씩 점프하는 char 배열 함수 호출");
return;
}