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    프린트하면 "너도게임"

 

보통은 도트연산자 ( . )를 사용해서 맴버에 접근하지만

구조체 포인터의 맴버에 접근할 때는 화살표로 접근해야한다.