본문 바로가기
C언어

[C언어] 구조체 초기화하는 방법

디지털노마드 2023. 2. 7.
반응형

 

C언어에서 자주 사용하는 구조체를 초기화 하는 방법은 여러가지가 있고, 주의해야 할 몇가지가 있다. 

 

typedef struct{
    char cmd_arr[5];
    int head;
    int tail;
}AA;

일단 가장 쉽게 구조체를 만들어 보자. 

cmd_arr[5] 라는 배열을 먼저 적어두고, 그 뒤에 int 형 데이터 2개를 붙혀준다. 

 

AA name1 = {.head = 3,
            .tail = 4
};

 

name1 이라는 객체를 만들면서 .head, .tail 이라고 적은다음 초기화를 선언할 수 있다. 

구조체의 선언에서 순서가 어떻게 되었든 head 와 tail 을 명확하게 나타내기 때문에 

의도된 대로 동작한다. 

 

printf("%s\n", name1.cmd_arr); //blank
printf("%d\n", name1.head); //3
printf("%d\n", name1.tail); //4

 

위와 같이 head 에는 3이, tail 에는 4가 저장되어 있다. 

 

typedef struct{
    char cmd_arr[5];
    int head;
    int tail;
}BB;

BB name2 = {2, 3}; //error

 

이렇게 하면 어떨까?

일단 결론부터 말하면 error 가 난다. 구조체의 첫번째 변수에 2를 저장하려고 하고, 두번째 변수에 3을 저장하려고 했는지는 모르겠지만, 일단 출력에서 알수 없는 데이터를 얻게 된다. 

 

printf("%s\n", name2.cmd_arr); //error
printf("%d\n", name2.head); //0
printf("%d\n", name2.tail); //0

 

위의 두번째 예제에서 head 와 tail 에 각각 초기화를 하려고 했다면 아래와 같이 구조체 선언의 순서를 바꿔줘야 한다. (메모리의 문제는 나중에 생각하자)

 

typedef struct{
    int head;
    int tail;
    char cmd_arr[5];
}CC;

CC name3 = {3, 4};

 

head 가 첫번째 변수이고, 3을 저장했으며, tail 이 두번째 변수이고 4를 저장했을 것이다. 

 

    printf("%d\n", name3.head); //3
    printf("%d\n", name3.tail); //4
    printf("%s\n", name3.cmd_arr); //blank

 

이렇게 하면 의도된 대로 데이터가 만들어진다. 

 

반응형

댓글