포인터 : 메모리를 주소로 참조해야 하는 겨우 사용. 포이너에는 메모리의 주소가 저장된다.
포인터의 형식
int* p;
→ 포인터 p는 int형을 가리키는 포인터로 선언되었음.
주소 연산자 &
p = &number;
→ 변수 number의 주소를 계산하여 p에 저장한다.
포인터 사용 간단한 예제※
int number = 10; //변수 정의
int *p; //포인터 정의
p = &number; //변수 number의 주소를 포인터 p에 저장
※포인터를 사용하기 전에는 반드시 초기화 되어야 한다. 포인터 생성 직후에는 초기화 되어 있지 않음.
포인터 사용시 주의할 점 :
포인터 타입과 변수의 타입은 일치하여야 한다. → int형 포인터에는 int형만이 가리킬 수 있다.
int i;
double *j;
j = &i; //오류 : double형 포인터에 int형 변수의 주소를 대입할 수 없다.
간접 참조 연산자**
: 포인터 p가 가리키는 메모리 공간의 내용을 가져오려면 *p하면 된다.
#include<iostream>
using namespace std;
int main(){
int number = 10;
int *p = &number; //변수 number의 주소를 계산하여 p에 저장한다.
cout << *p <<endl; //p가 가리키는 공간에 저장된 값을 출력한다.
return 0;
}
결과
10
nullptr
포인터가 선언만 되고 초기화되지 않으면 임의의 주소를 가리키게 된다. 이런 상황에서 포인터를 이용하여 메모리의 내용을 변경하면 문제가 발생한다.
int *p; //포인터 p는 초기화 되어 있지 않음
*p =100; //위험한 코드
따라서 아무것도 가리키고 있지 않을 경우 nullptr을 사용하는 것이 바람직하다.
int *p = nullptr;