출 처 : http://sizuha.egloos.com/3328771
지금부터...
메모리에 존재하는 것이라면 뭐든지 다 참조할 수 있는 포인터 형님, 그리고 C에서 제공하는 어떤 타입의 변수들도 모두 포용할 수 있는 구조체 형님의 운명적인(?) 만남을 보시겠습니다.
struct TCharacter {
int cheundere;
int cooldere;
int loli;
int sister;
int moe;
};
TCharacter shana;
TCharacter* p_character = &shana;
이렇게 구조체를 참조하는 포인터도 쉽게 만들수 있습니다.
그러면 이번엔 포인터를 이용해서 참조하고 있는 구조체의 각 맴버에 접근해 보도록 합시다.
(*p_character).cheundere = 100;
(*p_character).moe = 90;
(*p_character).sister = 0;
그러면 이번에는 구조체를 살짝 고쳐보도록 하겠습니다.
struct TMoe {
int cheundere;
int cooldere;
int loli;
int sister;
};
struct TCharacter {
char name[256];
int age;
TMoe* moe;
};
TCharacter shana;
TCharacter* p_character = &shana;
이번에는 구조체 안에서 포인터 맴버를 선언했습니다.
게가다 구조체에 대한 포인터입니다.
그러면 TCharacter 구조체 안의 moe에 접근해서, 다시 moe의 맴버인 loli 속성을 가져와 봅시다.
(*shana.moe).loli = 10;
이번에는 포인터 변수인 p_character를 통해서 같은 작업을 해봅니다.
(*(*p_character).moe).loli = 10;
어떤가요? 뭔가 좀 복잡한 느낌이죠?
이렇듯, 구조체 포인터일 경우에, 이런식으로 참조하고 있는 구조체의 맴버를 순전히 * 포인터 연산자를 통해서 따라가자니 좀 귀찮은 점도 있고, 코드도 그다지 깔끔하지가 못하죠.
그래서 고맙게도 C에서는 새로운 형태의 포인터 연산자를 하나 더 제공하고 있습니다.
바로, -> 연산자 입니다.
척 보기에도 화살표 같이 생겼죠? 요녀석이 하는 행동도 생긴꼴 그대로 입니다.
마찬가지의 작업을 요녀석을 가지고 다시 해보겠습니다.
p_character->moe->loli = 10;
어때요? 훨씬 보기도 좋고, 이해하기도 쉽지요?
-> 연산자는 포인터가 참조하고 있는 녀석이 구조체일 경우에, 포인터로 연결된 구조체의 맴버에 곧 바로 접근할 수 있게 해주는 연산자입니다. (C++ 에서는 class에 대해서도 똑같이 이 연산자를 적용할 수 있습니다)
다시한번 정리하면...
구조체를 참조하는 포인터의 경우,
(*구조체 포인터 p).구조체 맴버
형식의 코드를 다음과 같이 바꿀 수 있습니다.
구조체 포인터 p->구조체 맴버
오늘 강좌는 여기까지 입니다.
이번엔 꽤 짧았죠?