**구조체(Structure)**는 서로 다른 자료형의 변수들을 하나로 묶어서 개발자가 새로 만드는 사용자 정의 자료형입니다.
1. 구조체 정의 및 변수 사용법
#include <stdio.h>
#include <string.h>
// 1. 구조체 틀 정의
struct Student {
char name[20];
int age;
double gpa;
};
int main(void) {
// 2. 구조체 변수 선언
struct Student s1;
// 3. 멤버 접근 (점 연산자 . 사용)
strcpy(s1.name, "홍길동");
s1.age = 20;
s1.gpa = 4.2;
printf("학생 이름: %s, 나이: %d, 평점: %.1f\n", s1.name, s1.age, s1.gpa);
return 0;
}
2. typedef 키워드로 더 간결하게 사용하기
typedef를 활용하면 매번 struct Student라고 적지 않고 간결한 별칭(Alias)으로 사용 가능합니다.
typedef struct {
int x;
int y;
} Point; // 이제 'Point' 자체가 타입 이름이 됩니다.
Point p1 = {10, 20};
3. 구조체 포인터와 화살표 연산자 (->)
구조체 변수의 주소를 포인터로 가리킬 때는 **화살표 연산자(->)**를 사용해 멤버에 간편하게 접근할 수 있습니다.
Point p = {30, 40};
Point *ptr = &p;
printf("X 좌표: %d\n", ptr->x); // (*ptr).x 와 동일한 표현
4. 자주 묻는 질문 (Q&A)
Q. 구조체 메모리 크기가 각 멤버 크기의 합보다 더 크게 나오는 이유는 무엇인가요? A. CPU가 메모리를 읽을 때 4byte 또는 8byte 단위로 접근하기 용이하도록 컴파일러가 빈 공간(Padding Byte)을 채워 정렬하는 구조체 패딩(Structure Padding) 현상 때문입니다.