c 언어에서 구조체(Structure)는 다른 데이터 형식을 조합해서 만드는 사용자 정의 데이터 형식이다.
C 언어에서 struct 키워드를 이용해서 x와 y를 담는 Point 구조체를 선언할 수 있다.
struct Point { INT x; INT y; } |
Point와 같은 구조체 형식은 인스턴스를 선언할 때도 Struct 키워드를 명시해야 한다.
struct Point MyPoint = { 30, 40, }; // x는 30, y는 40으로 초기화 printf("x : %d, y : %d\n", MyPoint.x, MyPoint.y); // "x : 30, y : 40" 출력 |
위와 같이 Point의 멤버 변수 x와 y에 접근할 때 접근 연산자 .을 사용한다. 이 연산자의 이름은 멤버 접근 연산자(Member Access Operator)인데, 포인터를 통해 멤버에 접근할 때는 포인터 멤버 접근 연산자(Member Access Through Pointer Operator)를 사용해야 한다.
포인터 멤버 접근 연산자는 ->로 표현하며 사용 방법은 아래와 같다.
struct Point MyPoint = { 30, 40, }; struct Point* Ptr = &MyPoint; printf("x : %d, y : %d\n", Ptr->x, Ptr->y); |
Point 구조체 변수나 포인터를 선언할 때마다 struct 키워드를 언급해야 한다면 불편하다.
구조체를 선언할 때 typedef 키워드를 이용해서 별칭을 만들어두면 struct 키워드없이 구조체 이름만으로도 변수나 포인터를 선언할 수 있다.
일반 구조체 선언 | typedef를 이용한 구조체 별칭 선언 |
struct Point { int x; int y; } |
typedef struct tagPoint { int x; int y; } |
아래는 typedef를 이용해 위에서 선언한 Point를 재정의한 예제이다. 코드가 이전보다 간결해졌다.
typedef struct tagPoint { int x; int y; } Point; Point MyPoint = { 30, 40, }; Point* Ptr = &MyPoint; |
'Data Structures and Algorithms' 카테고리의 다른 글
0.3.1. C 언어로 메모리를 다루는 방법 (포인터) (0) | 2023.08.18 |
---|---|
0.2. 알고리즘 (0) | 2023.08.16 |
0.1 자료구조 (0) | 2023.08.16 |