본문 바로가기
프로그래밍 ( Programming )/C++

[c++] 포인터 설명, 예제코드

by Jayce_choi 2021. 1. 17.
반응형

C언어의 꽃인 포인터에 대해서 적어보도록 하겠습니다.

우선 주소 값이란 게 있습니다.

주소 값은 어떤 특정 데이터가 저장된 위치의 시작 주소를 의미합니다. c++에서는 주소 값을 1바이트 크기의 메모리 공간으로 나누어 이해를 할 수 있습니다. 

그리고 포인터(pointer)는 한글로는 가르키는자라는 의미답게 메모리의 주소 값을 저장하는 변수가 되겠습니다. 즉 포인터 변수라고도 하며 예를 들어 int 변수, 100을 가지는 a를 선언하였을 때 포인터 ptr_a라는 변수는 해당 a의 주소 값을 저장하는 역할을 하게 됩니다. 

int a = 100;
int *ptr_a = &a;

포인터 선언을 위해서는 하단과 같은 형식을 따라야합니다.

선언 형식 : 타입* 포인터 이름; 

그리고 추가적으로 동시 선언을 하기 위해서 int *ptr1, *ptr2; 로 선언이 가능하지만 다만 int* ptr1, ptr2;처럼 한 번에 포인터를 선언할 수는 없습니다.


포인터를 선언하게 되면 초기화를 시켜줘야 하는데 초기화되지 않은 채로 선언되어 사용된다면 어딘지 모르는 장소에 저장하게 되어서 디버깅이 매우 힘들게 되며 위험한 결과를 초래할 수도 있습니다. 때문에 포인터는 반드시 초기화되어야 합니다.

초기화는 다음과 같습니다. 두 가지 방법 모두 가능합니다.

1. 타입* 포인터 이름 = &변수이름&변수 이름;
2. 타입* 포인터 이름 = &주소값;


여기서 사용된 기호는 *와 &로 2가지입니다. 

1. 주소 연산자 (&)
2. 참조 연산자 (*)

우선 *표는 참조 연산자입니다. 참조 연산자는 포인터를 선언할 때 변수의 이름 앞에 붙게 되며 해당 기호가 반드시 있어야 포인터 역할을 수행할 수 있습니다. (다만 C++에서는 이항 연산자로 사용되면 곱셈 역할을 하기도 합니다)
때에 따라서 포인터를 다시 참조하는 경우도 있는데 하단의 예를 통해 확인하면 되겠습니다. 

int num = 1;            // 변수의 선언
int *ptrnum = #      // 포인터의 선언
int **ptr_ptrnum = &ptrnum; // 포인터의 참조

그리고 2번째 & 는 주소 연산자입니다. 주소 연산자는 변수의 이름 앞에 붙게 되어 해당 주소 값을 반환할 때 사용됩니다. 번지 연산자라고도 읽습니다. 


예제 코드 : 

#include<iostream>
using namespace std;

int main()
{

double num1 = 1.234;
double* ptr_num1 = &num1;

cout << "포인터의 크기는 " << sizeof(ptr_num1) << "입니다." << endl;
cout << "포인터 ptr_num1가 가리키고 있는 주소값은 " << ptr_num1 << "입니다." << endl;
cout << "포인터 ptr_num1가 가리키고 있는 주소에 저장된 값은 " << *ptr_num1 << "입니다." << endl;

return 0;
}

예제에서 num1이라는 double 변수를 선언합니다. 그리고 포인터를 이용하여 값을 참조하였으며 출력 부분에서는 포인터의 크기, 주소 값 그리고 주소가 가리키는 값을 출력하고 있습니다. 

반응형

댓글