기본 패턴
c
struct Student {
char name[20];
int score;
};
struct Student s = {"Kim", 90};
struct Student *ptr = &s;
ptr->score += 5;설명
- 구조체 값을 직접 다룰 때는
.연산자를 쓰고, 구조체 포인터를 통해 접근할 때는->를 씁니다. ptr->score는(*ptr).score의 축약형입니다.- 구조체를 함수 인자로 복사해서 넘기면 비용이 들 수 있으므로, 큰 구조체는 포인터로 넘기는 경우가 많습니다.
- 연결 리스트 같은 동적 자료구조에서는 구조체 포인터와
->문법이 기본이 됩니다.
짧은 예제
c
#include <stdio.h>
struct Point {
int x;
int y;
};
void move_right(struct Point *p) {
p->x += 1;
}
int main(void) {
struct Point point = {2, 3};
move_right(&point);
printf("%d %d\n", point.x, point.y);
return 0;
}빠른 정리
| 항목 | 설명 |
|---|---|
value.field | 구조체 값의 필드 접근 |
ptr->field | 구조체 포인터를 통한 필드 접근 |
(*ptr).field | ->의 원래 형태 |
| 포인터 전달 | 구조체 복사 없이 원본을 수정할 수 있음 |
| 자료구조 구현 | 리스트, 트리, 그래프 코드에서 자주 보임 |
주의할 점
구조체 포인터가 유효한 객체를 가리키지 않는 상태에서 ->를 쓰면 즉시 잘못된 메모리에 접근하게 됩니다. 초기화와 생명 주기를 먼저 확인해야 합니다.