변수를 초기화한 뒤 실행하면 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 |