48.3 익명 구조체 사용하기

typedef 구조체 별칭을 정의할 때 매번 구조체 이름을 지정해주려니 이것도 꽤 번거롭습니다. 이때는 익명 구조체(anonymous structure)를 사용하면 구조체 이름을 지정하지 않아도 됩니다. 즉, typedef로 구조체를 정의하면서 이름을 생략할 수 있습니다.

typedef struct {
    자료형 멤버이름;
} 구조체별칭;

변수는 구조체 별칭으로 선언하면 됩니다.

  • 구조체별칭 변수이름;

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

anonymous_struct.c

#define _CRT_SECURE_NO_WARNINGS    // strcpy 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>    // strcpy 함수가 선언된 헤더 파일

typedef struct {   // 구조체 이름이 없는 익명 구조체
    char name[20];        // 구조체 멤버 1
    int age;              // 구조체 멤버 2
    char address[100];    // 구조체 멤버 3
} Person;          // typedef를 사용하여 구조체 별칭을 Person으로 정의

int main()
{
    Person p1;    // 구조체 별칭 Person으로 변수 선언

    // 점으로 구조체 멤버에 접근하여 값 할당
    strcpy(p1.name, "홍길동");
    p1.age = 30;
    strcpy(p1.address, "서울시 용산구 한남동");

    // 점으로 구조체 멤버에 접근하여 값 출력
    printf("이름: %s\n", p1.name);       // 이름: 홍길동
    printf("나이: %d\n", p1.age);        // 나이: 30
    printf("주소: %s\n", p1.address);    // 주소: 서울시 용산구 한남동

    return 0;
}

실행 결과

이름: 홍길동
나이: 30
주소: 서울시 용산구 한남동

typedef struct 뒤에 이름을 지정하지 않고 바로 { (여는 중괄호)를 시작하면 됩니다. 단, 이때는 반드시 구조체 별칭을 지정해주어야 합니다.

typedef struct {    // 구조체 이름이 없는 익명 구조체
    char name[20];        // 구조체 멤버 1
    int age;              // 구조체 멤버 2
    char address[100];    // 구조체 멤버 3
} Person;           // typedef를 사용하여 구조체 별칭을 Person으로 정의

구조체 변수는 Person p1;과 같이 구조체 별칭으로 선언하고, 멤버에 접근할 때는 . (점)으로 접근하면 됩니다.

지금까지 구조체를 만들고 사용하는 방법을 배웠는데 생각보다 내용이 복잡했습니다. 구조체는 문법이 중요하므로 시간을 두고 구조체 선언과 사용 방법을 정확히 익히는 것이 좋습니다.