본문 바로가기

Cpp

포인터

변수를 초기화한 뒤 실행하면 CPU에서 RMA의 메모리의 어느 위치 해당 변수가 설정된다.

그리고 변수에 사용할 때마다 설정된 메모리의 주소를 접근한다.

 

 

포인터는 메모리의 주소를 저장하는 변수이다.

포인터 변수는 변수 선언에서 자료형과 식별자 사이에 *를 넣는다.

이때, *는 곱셈과는 다르게 단항연산이다. (곱셈의 * 는 이항 연산이다.)

포인터의 *를 역참조 연산자라고 부른다.

포인터 변수가 주소를 저장하기 위해서는 넘겨줄 주소를 설정해줘야하는데 주소연산자 &를 사용한다.

// 일반적인 변수 선언
int num = 0;

// int 형 자료의 주소를 받는 포인터 선언이다.
int *p = #
// 여기서 *는 역참조 연산자로 곱셈과는 다르다.
// &는 주소 연산자로 비트 연산과는 다르다.

참고로, 컴파일러는 실행되는 코드의 문맥을 확인하여 곱셈(*) 연산을 할지 참조(*) 연산을 할지 정한다.

포인터 변수의 자료형은 받을 주소의 변수 자료형과 같아야 한다.

 

포인터는 정수 리터럴을 받을 수 없는데 정수 리터럴은 메모리에 주소가 없기 때문이다.

이것은, 리터럴 메모리 주소를 할당하는 것도 마찬가지인데 리터럴 메모리 주소를 리터럴 정수로 취급하기 때문이다.

 

*를 통해 포인터가 가리키는 주소의 값에 접근 할 수 있다.

int num = 3;

int *p = #

cout << p   // &num 의 값 즉, num 의 메모리 주소를 출력한다.
cout << *p; // p가 가리키는 주소의 값인 num 의 값 3 을 출력한다.

실행 파일의 비트에 따라 4,8 바이트가 된다.

'Cpp' 카테고리의 다른 글

얕은 복사 깊은 복사  (0) 2023.06.13
함수 포인터  (0) 2023.06.13
STL MAP  (0) 2023.04.10
deque(double ended queue)  (0) 2023.04.10
비트 연산자  (0) 2023.02.28