티스토리 뷰

반응형

✅ 먼저: 포인터(pointer)란?

메모리 주소를 저장하는 변수입니다.
객체나 변수의 **‘실제 위치(주소)’**를 가리키는 도구라고 보시면 됩니다.

예시:

int x = 10;
int* px = &x;  // x의 주소를 저장
  • x는 값 10을 담는 변수
  • px는 x의 주소를 담고 있는 포인터
  • *px는 그 주소에 있는 값을 뜻하므로 10이 됩니다

✅ 클래스 객체와 포인터

클래스 객체도 포인터로 다룰 수 있습니다.

class Person {
public:
    void sayHello() {
        std::cout << "안녕하세요!" << std::endl;
    }
};
Person p;        // 객체 생성
Person* ptr = &p; // 객체 주소를 저장하는 포인터

✅ . vs ->의 차이

표현 의미 대상 예시

. 객체의 멤버에 접근 객체 그 자체 p.sayHello();
-> 포인터가 가리키는 객체의 멤버에 접근 포인터 ptr->sayHello();

즉,

  • .는 객체를 직접 다룰 때
  • ->는 객체 포인터를 다룰 때

🎯 시각적으로 이해해봅시다

Person p;       // 실제 사람
Person* ptr = &p; // 사람의 주소 (p를 가리키는 화살표)
  • p.sayHello(); → "직접 말해!"
  • ptr->sayHello(); → "주소로 찾아가서 말해!"

✅ 예시 코드로 전체 정리

#include <iostream>
using namespace std;

class Animal {
public:
    void speak() {
        cout << "동물이 말합니다!" << endl;
    }
};

int main() {
    Animal a;        // 객체 생성
    Animal* ptr = &a; // 포인터 변수에 주소 저장

    a.speak();        // 객체를 직접 접근: .
    ptr->speak();     // 포인터로 접근: ->

    return 0;
}

출력:

동물이 말합니다!  
동물이 말합니다!

✅ 요약 정리

구분 사용 대상 설명

. 객체 객체의 멤버 접근할 때 사용
-> 객체 포인터 포인터가 가리키는 객체의 멤버 접근할 때 사용
* 역참조 포인터가 가리키는 실제 값을 꺼낼 때 사용

🔄 응용: *와 .를 함께 쓰면 ->와 같다

(*ptr).speak();  // 괄호 필수!

이건 ptr->speak();와 완전히 같은 의미입니다.
→ ->는 사실 (*ptr).멤버를 줄인 문법입니다.


🌟 한 줄 정리

객체면 .을, 포인터면 ->를 씁니다.
->는 "주소로 찾아가서 멤버에 접근한다"는 뜻입니다.


 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형