핵심 정리

typedef로 자료형의 별칭 정의하기

typedef를 사용하면 구조체를 포함하여 모든 자료형의 별칭을 정의할 수 있습니다.

typedef 자료형 별칭;     // 자료형의 별칭 정의
typedef 자료형* 별칭;    // 자료형 포인터의 별칭 정의

구조체

구조체는 struct 키워드로 정의하며 관련 정보를 하나의 의미로 묶을 때 사용합니다.

// 구조체 정의하기
struct 구조체이름 {
    자료형 멤버이름;
};

// 구조체 변수 선언하기
struct 구조체이름 변수이름;

// 구조체 변수를 선언하는 동시에 값을 초기화
struct 구조체이름 변수이름 = { .멤버이름1 = 1, .멤버이름2 = 2 };
struct 구조체이름 변수이름 = { 1, 2 };

// 구조체를 정의하는 동시에 변수 선언하기
struct 구조체이름 {
    자료형 멤버이름;
} 변수;

// 구조체를 정의하면서 구조체 별칭 정의하기
typedef struct 구조체이름 {
    자료형 멤버이름;
} 구조체별칭;

// 익명 구조체 정의하기
typedef struct {
    자료형 멤버이름;
} 구조체별칭;

// 구조체 별칭으로 변수 선언하기
구조체별칭 변수이름;

구조체 멤버에 접근할 때는 . (점)을 사용합니다.

struct 구조체이름 변수이름;

변수.멤버;         // 구조체 멤버의 값을 가져옴
변수.멤버 = ;    // 구조체 멤버에 값을 저장

malloc 함수로 구조체 포인터에 메모리를 할당할 수 있으며 이때는 멤버에 접근할 때 -> (화살표 연산자)를 사용합니다.

// 구조체 포인터에 동적 메모리 할당
struct 구조체이름 *포인터이름 = malloc(sizeof(struct 구조체이름));

// 구조체 별칭으로 포인터를 선언하고 동적 메모리 할당
구조체별칭 *포인터이름 = malloc(sizeof(구조체별칭));

포인터->멤버;         // 구조체 포인터 멤버의 값을 가져옴
포인터->멤버 = ;    // 구조체 포인터 멤버에 값을 저장

free(포인터);    // 구조체 메모리 해제

구조체 포인터에는 & (주소 연산자)로 구조체 변수의 메모리 주소를 구해서 할당할 수 있습니다.

구조체포인터 = &구조체변수;