[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;
}

© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2