https://www.youtube.com/watch?v=dEOWAs6CptA&list=PLgqG2uj21HgkcfVtlr5rPekQl5VWJEnIB&index=12

https://www.youtube.com/watch?v=Y4f8ZB1iQxw&list=PLgqG2uj21HgkcfVtlr5rPekQl5VWJEnIB&index=13

학습 목표

  1. 포인터란 무엇인가?
  2. 객체기향 프로그래밍에서 포인터가 필요한 이유
  3. 포인터의 선언
  4. new 연산자
  5. delete 연산자

포인터란 무엇인가?

변수선언과정을 보면 val이라는 변수는 내부적으로 메모리의 주소값을 가지고 그곳에 값을 저장하게 된다.

int val = 3;

객체지향 프로그래밍에서 포인터가 필요한 이유

c++ 는 객체지향 프로그래밍이 가능하다. 이 말은 컴파일 시간이 아닌 실행시간에 어떠한 결정을 내릴 수 있다는 말이다. 배열을 예시로 들면 절차지향 프로그래밍에서는 배열의 크기가 미리 결정되어 있어야하지만 객체지향 프로그래밍에서는 배열의 크기를 실행시간에 결정할 수 있다.

포인터의 선언

포인터는 사용할 주소에 이름을 붙인다라고 이해하면 된다. 즉, 포인터는 포인터의 이름이 주소를 나타낸다.

c++에서 포인터는 간접값 연산자, 간접 참조 연산자라고 불리는 *을 이용하여 나타낼 수 있다.

선언을 할 때 *은 포인터를 나타내고, 포인터로 선언된 변수 b에서 *을 사용하면 메모리에 있는 값을 불러오는 기호로 사용한다. 포인터는 주소를 나타내기때문에 b와 &a(a의 주소)와 같게 된다

#include <iostream>

using namespace std;
int main(){
    int a = 6;
    int* b;
    b = &a;

    cout << "a의 값" << a << endl;
    cout << "*b의 값" << *b << endl;

    cout << "a의 주소" << &a << endl;
    cout << "*b의 주소" << b << endl;

    *b = *b + 1;
    cout << "이제 a의 값은" << a << endl;

    return 0;
}

new 연산자