struct
typedef struct {
int x;
int y;
} Point;
Point p = {3, 4};
printf("%d\n", p.x);
관련 필드를 한 덩어리로 묶습니다.
코딩 테스트 본선은 이 사이트에서 JS/Python을 쓰고, C 트랙은 실험·감각용입니다.
배열 of struct
Point ps[3] = {{0,0},{1,2},{3,4}};
for (int i = 0; i < 3; i++) {
printf("%d,%d\n", ps[i].x, ps[i].y);
}
인덱스와 필드(.)를 함께 씁니다.
포인터로 넘기기
void add(Point *a, int dx) {
a->x += dx;
}
->는 포인터에서 필드에 접근합니다. (*a).x와 같습니다.
패딩·크기
sizeof(Point)가 필드 합과 다를 수 있습니다(정렬).
연습 규모에서는 “값이 묶여 있다”는 감각만 가져가도 됩니다.
문자열 필드
typedef struct {
char name[32];
int score;
} Row;
name은 배열이므로 복사에 strncpy 계열과 null 종료를 의식해야 합니다.
실수하기 쉬우니 실험에서는 짧은 리터럴만 다루세요.
체크리스트
- 초기화
{...}순서가 필드 선언과 같은가? - 포인터면
->, 값이면.인가? - 배열 길이·버퍼 크기를 넘지 않는가?
연습
Point 두 개의 맨해튼 거리를 printf로 출력해 보세요.
한 줄
> 관련 값은 struct로 묶고, 포인터로 넘길 때는 ->.
값 vs 포인터 요약
| 문법 | 의미 |
|---|---|
p.x | 값(구조체)의 필드 |
q->x | 포인터가 가리키는 구조체의 필드 |
함수에 큰 구조체를 넘길 때는 포인터가 흔합니다.