구조체(Structure)는 서로 다른 자료형의 변수들을 하나의 이름으로 묶어 관리할 수 있게 해주는 사용자 정의 자료형입니다. 관련 있는 데이터를 하나의 단위로 그룹화하면 코드의 가독성과 유지보수성이 크게 향상됩니다.
구조체 선언의 일반적인 형식
구조체는 다음과 같은 형식으로 선언합니다.
struct 태그이름{
자료형 멤버1;
자료형 멤버2;
자료형 멤버n;
};
여기서 struct는 구조체를 정의할 때 사용하는 키워드이며, 태그이름(tagname)은 구조체의 이름을 지정합니다. 멤버1, 멤버2 등은 구조체를 구성하는 개별 데이터 항목을 의미합니다.
예제 1: 구조체 정의하기
다음은 책 정보를 저장하는 book 구조체를 정의한 예입니다.
struct book{
int pages;
char author[30];
float price;
};
예제 2: 지역 범위에서 구조체 사용하기
C 언어에서 구조체는 함수 외부(전역 범위)뿐만 아니라 함수 내부(지역 범위)에서도 선언할 수 있습니다. 함수 안에서 선언된 구조체는 해당 함수 내에서만 유효하며, 함수가 종료되면 더 이상 사용할 수 없습니다.
다음 프로그램은 manager() 함수 내부에 지역 범위의 구조체를 선언하여 사용하는 방법을 보여줍니다.
#include<stdio.h>
struct{
char name[20];
int age;
int salary;
char add[30];
}emp1,emp2;
int manager(){
struct{ //지역 범위에서 선언된 구조체
char name[20];
int age;
int salary;
char add[50];
}manager ;
manager.age=27;
if(manager.age>30)
manager.salary=650000;
else
manager.salary=550000;
return manager.salary;
}
int main(){
printf("emp1의 이름을 입력하세요:");
scanf("%s",emp1.name);
printf("\nemp1의 주소를 입력하세요:");
scanf("%s",emp1.add);
printf("\nemp1의 급여를 입력하세요:");
scanf("%d",&emp1.salary);
printf("\nemp2의 이름을 입력하세요:");
scanf("%s",emp2.name);
printf("\nemp2의 주소를 입력하세요:");
scanf("%s",emp2.add);
printf("\nemp2의 급여를 입력하세요:");
scanf("%d",&emp2.salary);
printf("\nemp1의 급여는 %d입니다",emp1.salary);
printf("\nemp2의 급여는 %d입니다",emp2.salary);
printf("\n관리자의 급여는 %d입니다",manager());
return 0;
}
핵심 포인트
- 전역 범위의 익명 구조체를 이용해 emp1, emp2 변수를 선언했습니다.
- manager() 함수 내부에는 비슷한 필드를 가진 별도의 지역 구조체가 선언되어 있으며, 이 구조체는 오직 해당 함수 안에서만 접근할 수 있습니다.
- manager() 함수는 나이가 30보다 크면 650000, 그렇지 않으면 550000을 급여로 반환합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
emp1의 이름을 입력하세요:Bob emp1의 주소를 입력하세요:Hyderabad emp1의 급여를 입력하세요:500000 emp2의 이름을 입력하세요:Hari emp2의 주소를 입력하세요:Chennai emp2의 급여를 입력하세요:450000 emp1의 급여는 500000입니다 emp2의 급여는 450000입니다 관리자의 급여는 550000입니다