[C++] ->(화살표연산자)와 .(도트연산자)의 차이

유빈·2024년 10월 9일
0

C++

목록 보기
8/12
post-thumbnail

자료구조를 공부하다가 접하게 되었다.


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가 그 값을 받는 것이다.


profile
🌱

0개의 댓글