[C++] 포인터


변수는 값을 보유하고 있는 메모리 조각의 이름이다. 프로그램이 변수를 인스턴스화 할 때 사용 가능한 메모리 주소가 변수에 자동으로 할당되고, 변수에 할당된 값은 메모리 주소에 저장된다.

int x; CPU가 다음 앞 문장을 실행시키면 ram의 메모리 조각이 따로 설정된다. 변수 x를 표현식이나 명령문으로 접근할 때마다 값을 얻으려면 메모리 위치 140을 찾아야 한다.

변수의 좋은 점은 어떤 메모리 주소가 할당되는지 걱정할 필요가 없다. 식별자로 변수를 참조하기만 하면 컴파일러에서 이 이름을 할당된 메모리 주소로 변환한다. 하지만 이렇게 하면 제한 사항이 있다.

주소 연산자 &

주소 연산자 &를 사용하면 변수에 할당된 메모리 주소를 확인할 수 있다.

#include <iostream>

int main(){
  int x = 5;
  std::cout << x << '\n'; // x의 값을 출력한다.
  std::cout << &x << '\n'; // x의 메모리 주소를 출력한다.
  
  return 0;
}

역참조 연산자 *

변수의 주소를 얻는 것은 별 쓸모가 없다. 역참조 연산자 *를 사용하면 특정 주소에서 값에 접근할 수 있다.

#include <iostream>

int main(){
  int x = 5;
  std::cout << x << '\n';
  std::cout << &x << '\n';
  std::cout << *&x << '\n'; // 변수 x의 메모리 주소에 있는 값을 출력한다.
}

포인터

포인터는 어떤 값을 저장하는 게 아니라 메모리 주소를 저장하는 변수이다.

포인터 선언

포인터는 일반 변수처럼 선언하면 된다. 자료형과 변수 이름 사이에 *가 붙는다.

int* iPtr; // 정수형 포인터
double* dPtr; // 실수형 포인터
int* iPtr2, *iPtr3; // 정수형 포인터 두 개 선언

일반 변수와 마찬가지로 포인터는 선언 시 초기화되지 않는다.

포인터에 값 할당

출처