자료구조를 공부하다가 접하게 되었다.
struct Polynomial {
char name;
Term* first = nullptr;
int size = 0;
Polynomial() {}
Polynomial(char name) : name(name) {}
};
void add_term(Polynomial& poly, int c, int e) {
if (c == 0) // 계수가 0일때
return;
Term* p = poly.first, * q = nullptr;
while (p != nullptr && p->expo > e) {
q = p;
p = p->next;
}
// ...
}
poly.first
가 뭔데,, 그런 함수가 있는건가?
-> NO
포인터를 통해 멤버에 간접적으로 접근한다.
클래스의 멤버를 직접적으로 접근한다.
a->b
==(*a).b
struct Polynomial {
char name;
Term* first = nullptr;
int size = 0;
Polynomial() {}
Polynomial(char name) : name(name) {}
};
void add_term(Polynomial& poly, int c, int e) {
if (c == 0) // 계수가 0일때
return;
Term* p = poly.first, * q = nullptr;
while (p != nullptr && p->expo > e) {
q = p;
p = p->next;
}
// ...
}
코드를 보면서 다시 이해해보자.
Polynomial 구조체 내부에 포인터 변수 first가 있다.
Term* p = poly.first, * q = nullptr;
여기서의 poly.first
는 구조체 Polynomial 형태를 갖는 변수 poly를 참조로 받아 해당 poly의 멤버 변수인 first를 말하는 것이다. 즉, poly라는 이름을 가진 Polynomial 변수의 멤버 변수로 저장된 first를 포인터 변수 p가 그 값을 받는 것이다.