C

구조체란?

1space 2025. 6. 15. 02:18

구조체의 목적

구조체(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 소요됨 (컴파일러 정렬에 따라 다름)