C구조체와 문자열

구조체 포인터와 화살표 연산자

구조체 포인터를 통해 필드에 접근할 때 쓰는 `->`와 `(*ptr).field`의 관계를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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->의 원래 형태
포인터 전달구조체 복사 없이 원본을 수정할 수 있음
자료구조 구현리스트, 트리, 그래프 코드에서 자주 보임

주의할 점

구조체 포인터가 유효한 객체를 가리키지 않는 상태에서 ->를 쓰면 즉시 잘못된 메모리에 접근하게 됩니다. 초기화와 생명 주기를 먼저 확인해야 합니다.