C++/C++입문

[C++] 7. 포인터

나는야 개발자 2025. 4. 8. 07:37
반응형

▶ 이전강의

- 바로가기

 

[C++] 6. TextRPG 레벨업 시스템 - 완성

▶ 이전 학습- 바로가기 [C++] 5. TextRPG 아이템 능력치 적용▶ 이전 학습- 바로가기 [C++] 4. TextRPG 아이템 장착▶ 이전 학습- 바로가기 [C++] 3. TextPRG 상점 제작TextRPG 전투- 링크 [C++] 2. TextRPG 전투▶

lhy-info.tistory.com

 

▶ 포인터란?

- 주소를 가르키는 변수
- 일반 변수는 값을 저장하는 변수이고, 포인터는 주소를 저장하는 변수
- 모든 변수 타입은 포인터 타입 선언 가능
- 포인터는 메모리 주소를 담아놓은 변수이기 때문에 x86으로 개발할 시 무조건 4byte, x64로 개발할 시 8byte가 나옴
- 포인터는 자기 스스로 아무런 일을 할수 없고, 반드시 다른 변수의 메모리 주소를 가지고 있어야 일을 할 수 있다.
- 메모리 주소에 접근해 값을 제어할 수 있음

 

▶ 형태

- 변수타입 *변수명 의 형태로 선언

int *iInt;

 

 

▶ 메모리 확인

int iInt = 10;
//포인터 변수, &는 주소를 가져오는 연산자
int *pInt = &iInt;

cout << "ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ메모리 확인" << endl;
cout << sizeof(int*) << endl; //x84기준 4byte | x64기준 8byte
cout << sizeof(char*) << endl; //x84기준 4byte | x64기준 8byte
cout << sizeof(double) << endl; //x84기준 8byte | x64기준 8byte
cout << sizeof(double*) << endl; //x84기준 4byte | x64기준 8byte

 

- pInt는 &iInt를 해줌으로 주소를 가르키는 포인터 변수가 되었음

- x64일땐 8byte, x86일땐 4byte인 것을 확인

 

▶ 주소와 값 확인

cout << "iInt 주소 : " << &iInt << endl; //iInt의 주소
cout << "iInt 값 : " << iInt << endl; //iInt의 값
cout << "pInt 주소 : " << &pInt << endl; //iInt의 주소
cout << "pInt 값 : " << pInt << endl; //iInt의 값
cout << "pInt 값 : " << *pInt << endl; //iInt의 값

- pInt인 포인터는 별도의 주소를 가지고 있음

- pInt를 확인했을때 iInt의 주소를 가지고 있으며 그 값이 동일하다는 것을 확인할 수 있음

 

▶역참조

- pInt를 이용해 iInt의 값을 변경 가능하며 이것을 역참조라 함
- 역참조는 포인터 앞에 *를 붙여주면 됨

cout << "ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ변경 후 주소 및 값 확인" << endl;
*pInt = 20;
cout << "iInt 주소 : " << &iInt << endl; //iInt의 주소
cout << "iInt 값 : " << iInt << endl; //iInt의 값
cout << "pInt 주소 : " << &pInt << endl; //iInt의 주소
cout << "pInt 값 : " << pInt << endl; //iInt의 값

- *pInt의 값을 20으로 만들어 준 후 확인해보았을때 iInt의 값도 함께 변하는 것을 볼 수 있음

- 이 말의 뜻은 pInt와 iInt는 동일한 주소를 가지고 있다는 것을 알 수 있게 됨

반응형