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;과 같이 구조체 별칭으로 선언하고, 멤버에 접근할 때는 . (점)으로 접근하면 됩니다.
지금까지 구조체를 만들고 사용하는 방법을 배웠는데 생각보다 내용이 복잡했습니다. 구조체는 문법이 중요하므로 시간을 두고 구조체 선언과 사용 방법을 정확히 익히는 것이 좋습니다.