구조체의 목적
구조체(struct)는 서로 다른 타입의 변수들을 하나의 묶음(단위)으로 다룰 수 있게 해주는 사용자 정의 자료형입니다.
예를 들어 학생 한 명의 정보를 저장한다고 할 때:
- 이름: 문자열
- 전화번호: 문자열
- 성별: 문자
- 점수: 정수
이걸 각각 따로따로 변수로 만들면 관련성이 떨어지고 관리가 어렵습니다.
그래서 등장한 것이 구조체!
struct student {
char name[10];
char phone[20];
char gender;
int score;
};
이렇게 하면 학생 한 명의 모든 정보를 하나로 묶어서 다룰 수 있게 됩니다.
→ 이름, 전화번호, 성별, 점수를 담는 하나의 구조체 "가방"이 만들어진다고 생각하시면 됩니다.
구조체 정의와 선언
✔ 구조체 정의(자료형 생성)
struct student {
char name[10];
char phone[20];
char gender;
int score;
};
- 이건 새로운 데이터 타입을 만든 것입니다.
- 이 자체로는 메모리를 만들지 않습니다.
마치 int, double 같은 기본형을 만드는 것과 같은 원리입니다.
✔ 구조체 변수 선언
struct student s1;
struct student s2;
- 이러면 s1, s2라는 구조체 변수가 각각 만들어집니다.
- 즉, 학생 2명분의 메모리 공간이 생기는 것입니다.
구조체 멤버 접근과 초기화
✔ 멤버 접근
s1.score = 100;
s1.gender = 'F';
s2.score = 92;
s2.gender = 'M';
- 구조체 안의 개별 요소에 접근할 때는 . 연산자를 사용합니다.
- s1.score는 s1이라는 학생의 점수
✔ 구조체 초기화
struct student s1 = {"홍길동", "01012345678", 'M', 100};
- 이렇게 한 번에 초기값을 주는 것도 가능합니다.
- 단, 구조체 정의 이후에 해야 하고, 순서에 맞게 초기화해야 합니다.
메모리 구조 이해
- struct student 안에 있는 name, phone, gender, score가 나란히 메모리에 배치됨
- 각각의 구조체 변수 s1, s2는 따로 존재하며, 그 안에 같은 구성의 멤버들을 가짐
예시: s1의 메모리 구조
필드 | 크기 | 내용 예시 |
name | 10 | "홍길동" |
phone | 20 | "01012345678" |
gender | 1 | 'M' |
score | 4 | 100 |
→ 총 35 소요됨 (컴파일러 정렬에 따라 다름)
'C' 카테고리의 다른 글
문자열 상수를 const char*에 저장하는 이유 (0) | 2025.06.15 |
---|---|
포인트 배열로 여러개 문자열 처리 (0) | 2025.06.14 |
문자열을 배열로 처리할 때 주의할점 (0) | 2025.06.14 |
배열 vs 포인터 : 문자열처리 (0) | 2025.06.14 |
문자열 상수 (0) | 2025.06.14 |