C언어 구조체와 구조체 포인터
요약
C언어 구조체의 기본 개념과 구조체 포인터, 화살표 연산자(->)를 알아봅니다. 정보처리기사 실기에 자주 출제되는 구조체 문제를 풀기 위한 핵심 개념을 정리합니다.
구조체 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 구조체 선언 | 여러 변수를 하나로 묶는 사용자 정의 자료형 | struct Student { int id; char name[20]; }; |
| 구조체 변수 | 구조체 타입의 변수 | struct Student s1; |
| 멤버 접근 (.) | 구조체 변수에서 멤버 접근 | s1.id |
| 멤버 접근 (->) | 구조체 포인터에서 멤버 접근 | p->id |
구조체란?
구조체(struct) 는 서로 다른 자료형의 변수들을 하나로 묶어서 관리하는 사용자 정의 자료형입니다.
예를 들어, 학생 정보를 관리한다면 학번(int), 이름(char[]), 점수(float)를 따로따로 관리하는 것보다 하나로 묶는 것이 편리합니다.

구조체 멤버란?
멤버(Member) 는 구조체 내부에 선언된 각각의 변수를 말합니다. 위 예시에서 id, name, score가 모두 멤버입니다.
| 멤버 이름 | 자료형 | 설명 |
|---|---|---|
id | int | 학번을 저장하는 정수형 멤버 |
name | char[20] | 이름을 저장하는 문자 배열 멤버 |
score | float | 점수를 저장하는 실수형 멤버 |
멤버는 서로 다른 자료형을 가질 수 있으며, 포인터 타입도 멤버가 될 수 있습니다.
구조체 멤버 접근
점(.) 연산자 - 구조체 변수
구조체 변수에서 멤버에 접근할 때는 점(.) 연산자를 사용합니다.
화살표(->) 연산자 - 구조체 포인터
구조체 포인터에서 멤버에 접근할 때는 화살표(->) 연산자를 사용합니다.

p->id는(*p).id와 동일합니다. 화살표 연산자가 더 간결해서 주로 사용됩니다.
구조체 배열
구조체도 배열로 선언할 수 있습니다. 배열의 각 요소가 구조체인 형태입니다.

구조체 배열과 포인터
구조체 배열의 특정 요소를 포인터로 가리킬 수 있습니다. 구조체가 자기 자신을 가리키는 포인터를 멤버로 가지면 연결 리스트를 만들 수 있습니다. 연결 리스트의 노드는 주로 동적 메모리 할당으로 생성합니다.

함수에서 구조체 포인터 사용
구조체 포인터를 함수의 매개변수로 전달하면, 함수 내에서 원본 구조체의 값을 직접 수정할 수 있습니다. 이 패턴은 시험에 자주 출제됩니다.
| 호출 방식 | 설명 |
|---|---|
init(&ba, ...) | ba의 주소를 전달 |
a->acc = x | 포인터로 원본 멤버에 접근하여 수정 |
typedef를 사용하면
struct Acc를Acc로 간결하게 쓸 수 있습니다.