반응형
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
이렇게 하면 의도된 대로 데이터가 만들어진다.
반응형
'C언어' 카테고리의 다른 글
[C언어] 2차원 배열 파라미터(매개변수)로 넘기기 (0) | 2023.02.14 |
---|---|
[C언어] 문자열, string 사용하는 방법 (0) | 2023.01.31 |
[C언어] 함수 포인터 배열, 실제 코드로 알아보자 (0) | 2023.01.31 |
[C언어] 함수포인터, function pointer 사용법 (0) | 2023.01.27 |
[C언어] Switch 문의 사용법과 주의사항 (0) | 2023.01.13 |
댓글