-> 화살표 연산자와. 도트(멤버) 연산자 차이점과 사용
ptrStr->name = "aa";
이런 화살표 연산자를 한 번쯤은 보셨을 겁니다. 사용상에 직감적으로 어느 구조체, 클래스에 name 변수에 접근한다는 것을 알 수 있으실 겁니다. 하지만 정확히 -> 와 . 의 차이점은 포인터인지 아닌지에 따라 결정됩니다.
struct Character {
int level;
int rank;
};
int main()
{
struct Character myCharacter = { 1, 100 };
myCharacter.level += 2;
}
일반적인 구조체 모습입니다. Character 구조체에 level 변수에 접근하는 것은 도트(멤버) 연산자로 위와 같이 접근을 할 수 있습니다.
struct Character {
int level;
int rank;
};
int main(){
struct *myCharacter = malloc(sizeof(Character));
*myChracter.level += 2; // 적절치 않음
}
경우에 따라 포인터로 구조체를 선언할 수 있는데, 이때에 멤버변수에 접근을 하려면, 언뜻 보기에는 위와 같이 사용하면 될 것 같습니다. 하지만 이 경우에는 myCharacter.level 통째로 참조 연산자(*)에 적용받습니다. 따라서 myCharacter의 구조체가 아닌 level로 역참조가 됩니다.
※ malloc은 메모리 할당(memory allocation) 입니다.
※ 해당 링크를 참조해주세요. https://thinkanother.tistory.com/8
struct Character {
int level;
int rank;
};
int main(){
struct *myCharacter = malloc(sizeof(Character));
(*myChracter).level += 2; // 적절함
}
따라서 이와 같이 괄호를 이용하여 먼저 연산되고 이후 도트(멤버) 연산자로 멤버변수에 접근을 하면, 하고자 하는 작업이 수행됩니다. 하지만 이것 역시 작업이 많아지면 간단한 부분이 아니기 때문에 -> 연산자를 사용합니다.
struct Character {
int level;
int rank;
};
int main(){
struct *myCharacter = malloc(sizeof(Character));
myChracter->level += 2; // 적절치 않음
}
-> 화살표 연산자를 사용하게 되면 보다 간편하게 사용할 수 있게 됩니다.
'개발 > C와 C++' 카테고리의 다른 글
[c/c++] PSTR(), F() 플래시 메모리에 값 저장 (0) | 2022.10.30 |
---|---|
[c/c++] #pragma once, 헤더파일 중복 피하기 (0) | 2022.10.02 |
[C/C++ Error] switch quantity not an integer (0) | 2022.09.01 |
[C/C++] 메모리 할당(malloc, calloc, realoc, free) (0) | 2022.08.22 |