C++ 기초

코딩 기초 29편 _ C++ 코딩 포인터(Pointer) 선언과 초기화, 포인터 참조 예제

모르는게 없는 지식인 2023. 6. 21. 11:00
반응형

안녕하세요?

지식아일랜드의 모르는 게 없는 지식인입니다.

 

오늘은 포인터의 선언과 초기화, 포인터의 참조에 대해 설명드리겠습니다.

 

 

포인터 선언

 

C++에서 포인터(Pointer)메모리 주소를 저장하는 변수입니다.

 

포인터를 선언하고 초기화하는 방법에 대해 자세히 설명드리겠습니다.

 

포인터를 선언할 때에는 변수의 자료형과 함께

"연산자를 사용합니다."연산자는 해당 변수가 포인터임을 나타냅니다.

 

아래는 포인터를 선언하는 예시입니다.

 

int* ptr;   // int 자료형의 포인터 변수 ptr 선언
float* fPtr;   // float 자료형의 포인터 변수 fPtr 선언

 

 

포인터 초기화

 

포인터를 선언하면 초기화되지 않은 상태입니다.

 

이때 포인터 변수에는 쓰레기 값이 저장됩니다.

 

올바른 주소로 초기화하여 포인터를 사용하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.

 

  

1. NULL로 초기화

 

NULL은 포인터에 아무런 주소도 할당되지 않았음을 나타내는 값입니다.

 

이 값을 사용하여 포인터를 초기화할 수 있습니다.

int* ptr = NULL   // NULL로 초기화된 int 포인터 ptr

 

2. 주소로 초기화

 

포인터를 변수 또는 배열의 주소로 초기화할 수 있습니다.

 

변수 또는 배열 이름 앞에 '&' 연산자를 사용하여 주소를 가져올 수 있습니다.

 

int num = 10;   // 정수형 변수 num
int* ptr = #   // 변수 num의 주소로 초기화된 int 포인터 ptr

 

3. new 연산자로 초기화

 

new 연산자는 동적으로 메모리를 할당하고 해당 메모리의 주소를 반환합니다.

 

new 연산자를 사용하여 메모리를 할당한 후, 포인터를 이 주소로 초기화할 수 있습니다.

 

int* ptr = new int;   // int 자료형 크기만큼 메모리를 동적 할당하고 포인터 ptr로 주소를 초기화

 

포인터 선언 및 초기화 예시를 종합해 보겠습니다.

 

int* ptr = NULL;   // NULL로 초기화된 int 포인터 ptr
float* fPtr = NULL;   // NUMM로 초기화된 float 포인터 fPtr

int num = 10;   // 정수형 변수  num
int* ptr2 = #   // 변수 num의 주소로 초기화된 int 포인터 ptr2

int* dynPtr = new int;   // int 자료형 크기만큼 메모리를 동적 할당하고 포인터 dynPtr로 주소를 초기화

 

위 예시를 참고하시면 C++에서 포인터의 선언과 초기화 방법을 이해하실 수 있을 것입니다.

 

 

포인터 참조

 

C++에서 참조(reference)변수에 대한 별칭(alias)을 만드는 데 사용됩니다.

 

포인터와 차이점은 참조는 포인터처럼 NULL 값으로 초기화되지 않으며,

선언과 동시에 변수에 대한 별칭이 되어야 한다는 것입니다.

 

자세한 설명과 예시를 통해 C++에서 참조를 이해해 보겠습니다.

 

 

< 참조 선언 >

 

참조를 선언할 때에는 변수의 자료형과 함께 '&'연산자를 사용합니다.

 

'&'연산자는 해당 변수를 참조하는 참조를 나타냅니다.

 

아래는 참조를 선언하는 예시입니다.

 

int num = 10;   // 정수형 변수 num
int& ref = num;   // 변수 num을 참조하는 참조 ref 선언

 

 

< 참조 사용 >

 

참조는 변수의 별칭이므로, 원본 변수와 참조는 동일한 메모리 위치를 공유합니다.

 

따라서 참조를 통해 변수에 접근하면 원본 변수의 값이 반환됩니다.

 

또한, 참조를 사용하여 변수 값을 변경하면 원본 변수의 값도 변경됩니다.

 

아래는 참조를 사용하는 예시입니다.

 

int num = 10;   // 정수형 변수 num
int& ref = num;   // 변수 num을 참조하는 참조 ref 선언

cout << "num: " << num << endl;   // 출력: num: 10
cout << "ref: " << ref << endl;   // 출력: ref: 10

num = 20;   // 변수 num의 값을 변경
cout << "num: " << num << endl;   // 출력: num: 20
cout << "ref: " << ref << endl;   // 출력: ref: 20

ref = 30;   // 참조 ref를 통해 변수 값을 변경
cout << "num: " << num << endl;   // 출력: num: 30
cotut << "ref: " << ref << endl;   // 출력: ref: 30

 

위 예시를 통해 num과 ref는 동일한 메모리 위치를 참조하므로 값이 서로 같음을 확인할 수 있습니다.

 

 

< 참조와 포인터의 차이 >

 

참조와 포인터는 비슷해 보이지만 몇 가지 차이점이 있습니다.

 

포인터메모리 주소를 저장하는 변수이고, NULL로 초기화되거나 다른 주소를 할당할 수 있습니다.

 

반면, 참조선언과 동시에 변수에 대한 별칭이 되어야 하며, NULL 값으로 초기화될 수 없습니다.

 

또한, 포인터는 다른 주소로 변경될 수 있지만, 참조는 초기에 한 번만 변수와 결합되고

이후에는 다른 변수와 결합할 수 없습니다.

반응형