▷ 포인터의 개념 정리
- 주소를 가르킨다.
- 메모리는 주소를 가지고 있고 주소를 통해 메모리 접근이 가능하다. 이 주소를 저장하고 있는게 바로 포인터이다.
- 거대한 데이터(struct와 같은)를 전달 인자(매개 변수)로 전달하는 것은 메모리 낭비이므로 포인터를 전달하면
거대한 데이터의 위치(주소)만 전달하면 되므로 효과적으로 사용할 수 있다.
▷ 흔히 책에 있는 예제 int nCount = 100; int *pCnt; pCnt = &nCount;
▷ 경험에 의한 예제 struct stUserBaseInfo{ int nUserIdx; char[50] nCharName; int nCharIdx; }; // 위의 이런 구조체가 있다는 가정이라면 거대한 데이터가 된다. stUserBaseInfo meInfo; stUserBaseInfo *pMeInfo; pMeInfo = (* stUserBaseInfo) meInfo; ------------------ └> "데이터형 변환자"라 부른다. // 즉 구조체를 가지는 거대한 데이터나 클래스를 통째로 넘겨 처리가 필요하다면 포인터로 주소만 넘기는 방법이 보다 효과적이라는 사실이다.
▷ 또 다른 예제 int* p_info; char* p_chInfo; //다른 데이터형일 경우 주소를 가르키려면?
p_chInfo = (char *) p_info; ------- └> "데이터형 변환자"를 이용하여 다른 데이터형일 경우 주소를 가르킨다.
p_info가 가르키는 주소 : p_info p_chInfo가 가르키는 주소 : (int *) p_chInfo |
▷ 포인터와 const
int gorp = 16; int chips = 12;
┌> 다른 변수를 지시할 수 있다. ( p_snack = chips; ) ---------- const int * p_snack = &gorp; -------- └> 지시하는 값은 변경할 수 없다. ( *p_snack = 20; )
┌> 지시하는 변수는 변경 불가능!! ------------- int * const p_snack = &gorp; ----- └> 값 변경 가능. |
▷ 더블 포인터
- 다차원 배열을 접근하는데 사용된다.
- 책에 나와 있는대로 포인터는 더블 포인터로 받는다라는 부분도 맞겠지만 엄밀히 말하자면 더블 포인터는
다차원 배열을 접근하는데 유용하게 사용된다는 점이다.
char* double_arr[] = {"abc", "def"}; char** ptr_arr = double_arr;
cout << ptr_arr[0] << endl;
출력 결과 abc
▷ 다차원 배열을 사용하지 않는 경우 char* double_arr[] = {"abc", "def"}; char* ptr_arr = double_arr[0];
cout << "ptr_arr : " << ptr_arr << endl; // 다차원 배열 접근이 아니라면 이렇게 접근이 가능하다. |
'Languages > cplusplus' 카테고리의 다른 글
[STL] Vector + Map 연습 코드 (0) | 2013.07.19 |
---|---|
[MFC] Dialog Box 위치 변경 (0) | 2012.11.26 |
지수표기 / enum / new 메모리 할당 (0) | 2012.10.12 |
데이터 형변환 (0) | 2012.09.26 |
셔플을 생각하고 구현해 보기 (0) | 2012.09.18 |