본문 바로가기
Computer/C

이차원 배열 포인터

by hexists 2017. 1. 25.

이차원 배열 포인터를 지정해서 사용하는 방법


이렇게 하면, main에 선언된 *input의 포인터 사이즈가 MAX_EOJ_SIZE로 할당된다.

main에서는 input[x][y] 형식으로 사용할 수 있다.



#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define MAX_EOJ_COUNT 16

#define MAX_EOJ_SIZE 64



typedef struct data {

        char input[MAX_EOJ_COUNT][MAX_EOJ_SIZE];

} data_t;



int main() {

    data_t *data = malloc(sizeof(data_t));

    char (*input)[MAX_EOJ_SIZE] = data->input;

    int i;


    strcpy(input[0], "abc");

    strcpy(input[1], "def");


    for(i = 0; i < 2; i++) {

        printf("input[%d] : %s\n", i, input[i]);


    }


return 0;

}


참고 gdb로 확인


gdb) p &data->input

$5 = (char (*)[16][64]) 0x601010

(gdb) n

19    strcpy(input[0], "abc");

(gdb) p input

$6 = (char (*)[64]) 0x601010

(gdb) p &data->input[1]

$7 = (char (*)[64]) 0x601050

(gdb) p input[1]

$8 = '\000' <repeats 63 times>

(gdb) p &input[1]

$9 = (char (*)[64]) 0x601050

(gdb) q