출처: https://blog.iroot.kr/341 [RootKR]
C언어에서 구조체는 다양하게 사용가능 합니다. 예를 들면 여러가지 변수의 묶음을 한번에 전달할 수 있고,
연결 리스트로 사용할 수 도 있습니다.
하지만 구조체의 정의와 구조체 변수는 다양한 방법으로 선언할 수 있습니다.
한번씩 알아보고 넘어가는게 타인의 코드를 볼 때 쉬운 이해를 도울 수 있을 것 같아 정리합니다.
1
2
3
4
|
struct card{
int pips;
char suit;
};
|
위와 같은 코드는 구조체 변수 선언이 아닌 struct card에 대한 정의 입니다.
1
2
3
4
5
6
|
struct card{
int pips;
char suits;
};
struct card c1, c2;
|
이렇게 되면 위에서 정의한 struct card 형 변수 c1, c2 가 생기게 됩니다.
1
2
3
4
|
struct card{
int pips;
char suits;
} c1, c2;
|
이런 식으로 struct card형 변수 c1, c2 를 생성할 수 있습니다.
1
2
3
4
5
6
7
8
|
struct card{
int pips;
char suits;
};
typedef struct card card;
card c1, c2;
|
typedef 를 통해 struct card 형 변수의 별칭을 card로 정의 한 뒤
card 형 변수 c1, c2를 선언한 경우입니다.
struct card 가 card라는 별칭으로 선언되었기 때문에 이제 card c3; 등의 방법을 통해
구조체 변수를 선언 할 수 있습니다.
1
2
3
4
5
6
|
typedef struct card{
int pips;
char suits;
} card;
card c1, c2;
|
위 코드는 이전 코드와 기능이 같습니다. struct card 형 변수를 typedef를 통해
card라는 별칭을 만들어주고 card형 변수 c1,c2를 선언합니다.
이 형태가 가장 일반적으로 구조체를 선언하는 형태입니다.
헤더파일에 4번 line 까지 선언을 해 놓으면 int, char와 같이
변수로 쉽게 선언하고 사용할 수 있습니다.
1
2
3
4
|
struct {
int pips;
char suit;
} c1, c2;
|
이렇게 되면 구조체 태그 이름이 없기 때문에 c1, c2와 같은 형의 변수는 다시 선언할 수 없습니다.
1
2
3
4
5
6
7
8
9
|
struct {
int pips;
char suit;
} c1, c2;
struct {
int pips;
char suit;
} c3, c4;
|
이 코드에서 같은 방법으로 선언되었지만 c1,c2 와 c3,c4는 분명히 다른 자료형입니다.
다음 글은 몇가지 예시를 통해 구조체에 대해 알아보겠습니다. 될 수있으면..?
unix파일구조, inode, 심볼릭링크(소프트링크), 하드링크 (0) | 2020.09.24 |
---|---|
[C] 문자열 배열 초기화 (0) | 2020.03.01 |
[C] 연산자와 결합법칙,우선순위 (0) | 2020.03.01 |
[C]구조체 안에서 정의되지 않은 구조체를 쓰려면? (1) | 2020.02.29 |
[C] 구조체는 어떻게 저장될까? (구조체에서의 패딩) (0) | 2020.02.28 |
댓글 영역