Tech Blog/C and C++
C언어 - 도트연산자 (.) 과 화살표연산자(->) 차이
EXPRESSIONS HAVE POWER
2021. 6. 17. 16:17
구조체 변수를 이용하여 구조체 원소에 접근할 때는 도트연산자 .을 사용
포인터를 사용하여 구조체 원소에 접근할 때는 화살표 연산자(->) 사용
#include <stdio.h>
struct GameInfo {
char * name;
int year;
int price;
char * company;
struct GameInfo * friendGame; // 연관 업체 게임
};
int main(void)
{
// 구조체 사용
struct GameInfo gameInfo1;
gameInfo1.name="나도게임";
gameInfo1.year=2017;
gameInfo1.price=50;
gameInfo1.company="나도회사";
struct GameInfo gameInfo2 = {"너도게임", 2017, 100, "너도회사"};
// 구조체 포인터
struct GameInfo * gamePtr; // 미션맨
gamePtr = &gameInfo1;
printf("\n\n-- 미션맨의 게임 출시 정보 --\n");
printf(" 게임명 : %s\n", (*gamePtr).name);
printf(" 발매년도 : %d\n", (*gamePtr).year);
printf(" 가격 : %d\n", (*gamePtr).price);
printf(" 제작사 : %s\n", (*gamePtr).company);
printf("\n\n-- 미션맨의 게임 출시 정보 --\n");
printf(" 게임명 : %s\n", gamePtr->name);
printf(" 발매년도 : %d\n", gamePtr->year);
printf(" 가격 : %d\n", gamePtr->price);
printf(" 제작사 : %s\n", gamePtr->company);
// 연관 업체 게임 소개
gameInfo1.friendGame = &gameInfo2;
// 연관 업체의 게임 출시 정보
printf("\n\n-- 미션맨 친구의 게임 출시 정보 --\n");
printf(" 게임명 : %s\n", gameInfo1.friendGame->name);
printf(" 발매년도 : %d\n", gameInfo1.friendGame->year);
printf(" 가격 : %d\n", gameInfo1.friendGame->price);
printf(" 제작사 : %s\n", gameInfo1.friendGame->company);
}
실행결과
-- 미션맨의 게임 출시 정보 --
게임명 : 나도게임
발매년도 : 2017
가격 : 50
제작사 : 나도회사
-- 미션맨의 게임 출시 정보 --
게임명 : 나도게임
발매년도 : 2017
가격 : 50
제작사 : 나도회사
-- 미션맨 친구의 게임 출시 정보 --
게임명 : 너도게임
발매년도 : 2017
가격 : 100
제작사 : 너도회사
도트연산자와 ( . ) 화살표연산자 ( -> ) 모두 접근이라는 의미로 사용된다.
(*gamePtr).name 프린트하면 "나도게임"
gmaePtr -> name 프린트하면 "나도게임"
gameInfo1.friendgame-> name 프린트하면 "너도게임"
보통은 도트연산자 ( . )를 사용해서 맴버에 접근하지만
구조체 포인터의 맴버에 접근할 때는 화살표로 접근해야한다.