안녕하세요.
이번에 C언어의 꽃이라 생각하는 포인터에 대해서 알아보겠습니다.
모두가 개념을 이해하기 어려운 부분이라 생각합니다.
최대한 쉽게 알아보러 가시죠.
자, 우선 포인터를 어떻게 사용하는지 보겠습니다.
선언은 int *a 처럼 앞에 자료형을 적어주고 *을 변수 앞에 붙여주시면 됩니다.
그리고 변수에 값은 int *a = &n 처럼 &로 값을 넣어주시면 됩니다.
포인터를 쉽게 설명했다고 생각하는 사진을 보시겠습니다.
이미지만 보면 "이게 왜 잘 설명한 사진이지?" 라고 생각하실 수 있습니다.
간단한 설명과 예를 들어 보겠습니다.
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 |