화살표 연산자 (->)
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 멤버에 접근하는 표준적인 방법입니다.
챌린지
쉬움포인터를 통해 구조체 멤버에 접근하기 위해 화살표 연산자를 사용하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 다음 멤버를 포함하는
Book이라는 이름의struct를 정의합니다:- 도서 ID를 저장할 정수형
id - 도서 제목을 저장할 크기 40의 문자 배열
title - 저자 이름을 저장할 크기 30의 문자 배열
author - 도서 가격을 저장할 실수형
price - 페이지 수를 저장할 정수형
pages
- 도서 ID를 저장할 정수형
- main 함수에서
myBook이라는 이름의Book변수를 생성합니다. bookPtr이라는 이름의Book구조체 포인터를 선언합니다.myBook의 주소를bookPtr에 할당합니다.- 다음 입력 값들을 읽고 포인터를 통한 화살표 연산자를 사용하여 구조체 멤버에 할당합니다:
- ID를 위한 정수를 읽고
bookPtr->id를 사용하여 할당합니다. - 제목을 위한 문자열을 읽고
bookPtr->title을 사용하여 할당합니다. - 저자를 위한 문자열을 읽고
bookPtr->author를 사용하여 할당합니다. - 가격표를 위한 실수를 읽고
bookPtr->price를 사용하여 할당합니다. - 페이지 수를 위한 정수를 읽고
bookPtr->pages를 사용하여 할당합니다.
- ID를 위한 정수를 읽고
- 모든 값을 읽은 후, 화살표 연산자를 사용하여 다음 연산을 수행합니다:
- 가격에 10% 할인을 적용합니다:
bookPtr->price = bookPtr->price * 0.9; - 보너스 페이지 50장을 추가합니다:
bookPtr->pages += 50;
- 가격에 10% 할인을 적용합니다:
- 화살표 연산자를 사용하여 각 멤버에 접근하여 다음의 정확한 형식으로 도서 정보를 출력합니다:
Book Information:ID: [id]Title: [title]Author: [author]Price: [price]Pages: [pages]
- 화살표 연산자를 사용하여 페이지당 가격을 계산하고
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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.