문법 · C · beginner

구조체 맛보기: 묶음과 배열

관련 값을 struct로 묶고, 배열로 다루는 최소 감각.

배우기 · C 실험 기초 · 14분 · 5/6 · C · struct

C 실험실
이 트랙 목차 (6)
  1. 1. C 실험: main과 입출력 감각
  2. 2. C 타입·배열·반복
  3. 3. 포인터 감각: 주소·배열·decay
  4. 4. C 문자열: null 종료와 길이
  5. 5. 구조체 맛보기: 묶음과 배열
  6. 6. 반복과 간단한 입출력

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 종료를 의식해야 합니다.
실수하기 쉬우니 실험에서는 짧은 리터럴만 다루세요.

체크리스트

  1. 초기화 {...} 순서가 필드 선언과 같은가?
  2. 포인터면 ->, 값이면 .인가?
  3. 배열 길이·버퍼 크기를 넘지 않는가?

연습

Point 두 개의 맨해튼 거리를 printf로 출력해 보세요.

한 줄

> 관련 값은 struct로 묶고, 포인터로 넘길 때는 ->.

값 vs 포인터 요약

문법의미
p.x값(구조체)의 필드
q->x포인터가 가리키는 구조체의 필드

함수에 큰 구조체를 넘길 때는 포인터가 흔합니다.

관련 짧은 원리

관련 문제