본문 바로가기

Data Structures and Algorithms

0.3.2. C 언어로 메모리를 다루는 방법 (구조체)

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