Menu
Coddy logo textTech

화살표 연산자 (->)

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 45번째.

구조체 포인터를 다룰 때, 구조체 멤버에 접근하려면 특별한 구문이 필요합니다. 역참조 연산자와 점 표기법을 함께 사용할 수도 있지만, C는 이 목적을 위해 특별히 더 편리한 연산자인 화살표 연산자(->)를 제공합니다.

화살표 연산자를 사용하면 포인터를 통해 구조체 멤버에 깔끔하고 가독성 좋은 방식으로 접근할 수 있습니다:

ptr->member

이것은 (*ptr).member를 쓰는 것과 동일하지만, 훨씬 더 간결합니다.

실제로는 다음과 같이 작동합니다:

struct Point p1 = {10, 20};
struct Point *ptr = &p1;

// 화살표 연산자 사용
printf("x = %d, y = %d\n", ptr->x, ptr->y);

// 이것은 다음과 같습니다:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

화살표 연산자는 특히 복잡한 데이터 구조를 다룰 때 코드를 더 깔끔하고 읽기 쉽게 만들어 줍니다. 이는 C 프로그래밍에서 포인터를 통해 struct 멤버에 접근하는 표준적인 방법입니다.

challenge icon

챌린지

쉬움

포인터를 통해 구조체 멤버에 접근하기 위해 화살표 연산자를 사용하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 다음 멤버를 포함하는 Book이라는 이름의 struct를 정의합니다:
    • 도서 ID를 저장할 정수형 id
    • 도서 제목을 저장할 크기 40의 문자 배열 title
    • 저자 이름을 저장할 크기 30의 문자 배열 author
    • 도서 가격을 저장할 실수형 price
    • 페이지 수를 저장할 정수형 pages
  2. main 함수에서 myBook이라는 이름의 Book 변수를 생성합니다.
  3. bookPtr이라는 이름의 Book 구조체 포인터를 선언합니다.
  4. myBook의 주소를 bookPtr에 할당합니다.
  5. 다음 입력 값들을 읽고 포인터를 통한 화살표 연산자를 사용하여 구조체 멤버에 할당합니다:
    • ID를 위한 정수를 읽고 bookPtr->id를 사용하여 할당합니다.
    • 제목을 위한 문자열을 읽고 bookPtr->title을 사용하여 할당합니다.
    • 저자를 위한 문자열을 읽고 bookPtr->author를 사용하여 할당합니다.
    • 가격표를 위한 실수를 읽고 bookPtr->price를 사용하여 할당합니다.
    • 페이지 수를 위한 정수를 읽고 bookPtr->pages를 사용하여 할당합니다.
  6. 모든 값을 읽은 후, 화살표 연산자를 사용하여 다음 연산을 수행합니다:
    • 가격에 10% 할인을 적용합니다: bookPtr->price = bookPtr->price * 0.9;
    • 보너스 페이지 50장을 추가합니다: bookPtr->pages += 50;
  7. 화살표 연산자를 사용하여 각 멤버에 접근하여 다음의 정확한 형식으로 도서 정보를 출력합니다:
    • Book Information:
    • ID: [id]
    • Title: [title]
    • Author: [author]
    • Price: [price]
    • Pages: [pages]
  8. 화살표 연산자를 사용하여 페이지당 가격을 계산하고 Price per page: [price_per_page] 형식으로 출력합니다.

이 챌린지는 포인터를 통해 구조체 멤버에 접근하기 위한 화살표 연산자에 대한 이해를 테스트합니다. 구조체 멤버를 읽고 쓰는 데 ptr->member 구문을 사용하는 연습을 하게 되며, 이것이 (*ptr).member와 동일하지만 훨씬 더 편리하고 가독성이 좋다는 것을 보여줍니다.

치트 시트

화살표 연산자(->)는 포인터를 통해 구조체 멤버에 접근하는 편리한 방법을 제공합니다:

ptr->member

이것은 (*ptr).member와 동일하지만 더 간결하고 가독성이 좋습니다.

사용 예시:

struct Point p1 = {10, 20};
struct Point *ptr = &p1;

// 화살표 연산자 사용
printf("x = %d, y = %d\n", ptr->x, ptr->y);

// 이것은 다음과 같습니다:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

직접 해보기

#include <stdio.h>
#include <string.h>

// TODO: 여기에 Book 구조체를 정의하세요

int main() {
    // TODO: myBook이라는 이름의 Book 변수를 생성하세요
    
    // TODO: bookPtr라는 이름의 Book 포인터를 선언하세요
    
    // TODO: myBook의 주소를 bookPtr에 할당하세요
    
    // 입력값 읽기
    int id;
    char title[40];
    char author[30];
    float price;
    int pages;
    
    scanf("%d", &id);
    scanf("%s", title);
    scanf("%s", author);
    scanf("%f", &price);
    scanf("%d", &pages);
    
    // TODO: 화살표 연산자를 사용하여 입력값을 구조체 멤버에 할당하세요
    
    // TODO: 화살표 연산자를 사용하여 가격에 10% 할인을 적용하세요
    
    // TODO: 화살표 연산자를 사용하여 보너스 페이지 50장을 추가하세요
    
    // TODO: 화살표 연산자를 사용하여 도서 정보를 출력하세요
    
    // TODO: 화살표 연산자를 사용하여 페이지당 가격을 계산하고 출력하세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨