본문 바로가기
프로그래밍언어/C언어[초급]

[C언어][초급] Chapter56. 구조체 멤버 접근 – 점(.)과 화살표(→) 연산자 차이 알기

by about_IT 2025. 4. 19.
728x90

구조체를 선언하고 나면, 그 안의 정보를 꺼내거나 수정할 수 있어야 합니다.
이를 위해 사용하는 것이 바로 멤버 접근 연산자입니다.

C언어에서는 구조체 멤버에 접근할 때 두 가지 방법을 사용합니다:
점 연산자(.)와 화살표 연산자(→)입니다.


● 점(.) 연산자: 일반 구조체 변수에서 사용

struct Student {
    char name[20];
    int age;
};

struct Student s1;
s1.age = 20;

구조체 변수가 직접 선언되어 있을 때는 점 연산자를 사용합니다.


● 화살표(→) 연산자: 구조체 포인터에서 사용

struct Student s1 = {"철수", 20};
struct Student *p = &s1;

p->age = 25;
printf("%s %d\n", p->name, p->age);

구조체 포인터를 사용할 때는 화살표 연산자를 사용하는 것이 일반적입니다.


● (*포인터).멤버도 가능하다

(*p).age = 25;

화살표 연산자는 사실 포인터를 먼저 역참조한 뒤 점 연산자를 사용하는 표현을 간략하게 줄인 것입니다.
즉, 괄호로 묶어서 (*p).멤버와 같이 쓰는 것도 완전히 올바른 방식입니다.


● 구조체를 포인터로 함수에 넘기는 예

void printStudent(struct Student *s) {
    printf("%s %d\n", s->name, s->age);
}

함수 인자로 구조체를 포인터로 넘기면 메모리 절약과 값 수정이 가능합니다.


● 요약

  • 점(.)은 구조체 변수에서 사용합니다.
  • 화살표(→)는 구조체 포인터에서 사용합니다.
  • (*포인터).멤버 형식도 완전히 유효한 방식입니다.

점과 화살표 연산자의 용도를 명확히 이해하면 구조체와 포인터를 자연스럽게 다룰 수 있습니다.
단순히 외우기보단, 메모리 흐름을 떠올리면서 연습하는 것이 중요합니다.


● 실습 문제

문제 1

학생 구조체 s1의 이름을 "민수"로 저장하고 출력하세요. (점 연산자 사용)

 

문제 2

구조체 포인터 p를 사용해 나이를 30으로 저장하고 출력하세요. (화살표 연산자 사용)

 

문제 3

점 연산자와 화살표 연산자의 차이를 설명하세요.

 

문제 4

포인터 p를 사용해 (*p).name = "철수"와 p->name 중 어떤 것이 더 권장되는 표현인가요?

 

문제 5

구조체 포인터에서 점 연산자를 쓰기 위한 조건은 무엇인가요?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

▶ 정답 확인하기

정답 1

struct Student s1;
strcpy(s1.name, "민수");
printf("%s\n", s1.name);

 

정답 2

struct Student s1;
struct Student *p = &s1;
p->age = 30;
printf("%d\n", p->age);

 

정답 3

점 연산자는 구조체 변수에서 사용하고, 화살표 연산자는 구조체 포인터에서 사용합니다.

 

정답 4

둘 다 올바르지만, 간결하고 가독성 좋은 표현인 p->name이 더 많이 쓰이고 권장됩니다.

 

정답 5

포인터를 괄호로 묶어 먼저 역참조하면 점 연산자를 사용할 수 있습니다. 예: (*p).멤버

728x90