▶ 이전강의
- 바로가기
[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는 동일한 주소를 가지고 있다는 것을 알 수 있게 됨
'C++ > C++입문' 카테고리의 다른 글
[C++] 9. Char, 구조체, void 포인터 (0) | 2025.04.09 |
---|---|
[C++] 8. 배열과 포인트 연산 (0) | 2025.04.08 |
[C++] 6. TextRPG 레벨업 시스템 - 완성 (0) | 2025.04.04 |
[C++] 5. TextRPG 아이템 능력치 적용 (0) | 2025.04.04 |
[C++] 4. TextRPG 아이템 장착 (0) | 2025.04.03 |