본문 바로가기
C++, MFC

[C++] Pointer <포인터>

by mutex 2024. 7. 29.

안녕하세요.

이번에 C언어의 꽃이라 생각하는 포인터에 대해서 알아보겠습니다.

 

모두가 개념을 이해하기 어려운 부분이라 생각합니다.

 

최대한 쉽게 알아보러 가시죠.


자, 우선 포인터를 어떻게 사용하는지 보겠습니다.

 

선언은 int *a 처럼 앞에 자료형을 적어주고 *을 변수 앞에 붙여주시면 됩니다.

 

그리고 변수에 값은 int *a = &n 처럼 &로 값을 넣어주시면 됩니다.

 

포인터를 쉽게 설명했다고 생각하는 사진을 보시겠습니다.

 

출처 : https://opentutorials.org/module/1034

 

이미지만 보면 "이게 왜 잘 설명한 사진이지?" 라고 생각하실 수 있습니다.

 

간단한 설명과 예를 들어 보겠습니다.

array[n] 포인터
0~4 포인터안의 변수값 집 안의 홍길동
0xXXXXXXXXX 포인터를 가르키는 주소값 부산 해운대구 XX아파트

 

"부산 해운대구 XX아파트 집에 홍길동이 존재하는데 그 홍길동을 데리고 나오고 싶다. " 

=

"0xXXXXXXXX 주소를 가지고있는 포인터에 변수를 호출하고 싶다" 라는 말입니다.

 

즉 포인터란 변수값이 들어가있는 주소가 있는 집이라고 생각하면 됩니다.

 

 코드 보시죠.

int a = 3;
int *a_ptr = &a;

cout << "a의 값" << a << endl;
cout << "a_ptr의 값" << a_ptr << endl;


//출력
// a의 값 3
// a_ptr의 값 00CFDDCD

 

정수형 변수인 a에 3의 값을 넣어주고

 

a_ptr포인터를 a변수값의 주소로 초기화 하였습니다.

 

a값은 당연히 3이 나올테고, a_ptr의 값을 출력한다면 3이 나올것 같지만 00CFDDCD가 나옵니다.

 

왜 저렇게 나올까요??

 

답은 간단합니다. a_ptr에 넣어준것은 변수값이 아니라 변수값의 주소이기 때문입니다.

그 개념을 이해하기 위해선 2가지의 연산자를 이해하면 편합니다.

 


주소 연산자와 참조 연산자

 

  • 주소 연산자 &는 변수 이름 앞에 사용하여 해당 변수의 메모리 주소 값을 반환한다.
  • 참조 연산자 *는 포인터의 이름이나 주소 앞에 사용하며  해당 주소를 참조하여 주소에 저장되어 있는 값을 반환한다.
int a = 3;
int *a_ptr = &a;

cout << "주소연산자" << &a << endl;
cout << "참조연산자" << *a_ptr << endl;
cout << "주소연산자와 참조연산자" << *&a << endl;


//출력
// 주소연산자  00CFDDCD
// 참조연산자  10
// 주소연산자와 참조연산자 10

'C++, MFC' 카테고리의 다른 글

[C++, MFC] SNMP 서비스  (1) 2024.08.27
[C++/STL] Array, Vector, List, Map 차이  (0) 2024.08.13
[C++] template 함수  (0) 2024.08.13
[C++,MFC] std::string <--> CString  (0) 2024.07.31
[MFC] CString 문자열 비교 Compare()  (0) 2024.07.23