변수 가리키기 - 포인터
포인터
변수의 주소를 저장하는 변수, 주로 ptr이라고 씀.
#include <iostream>
using namespace std;
int main() {
int a = 20;
int* ptr_a; // 포인터 변수, *(별표)로 구분
ptr_a = &a; // 다른 변수의 '주소를 저장하는' 변수
cout << "a의 값: " << a << endl;
cout << "a의 주소값: " << &a << endl;
cout << "ptr_a에 '저장된' 값: " << ptr_a << endl;
cout << "ptr_a가 '가리키는' 변수의 값: " << *ptr_a << endl;
// ptr 자체로는 주소를 나타냄. 별표를 붙이면 변수 가리킴.
}
포인터 활용해 변수값 바꾸기
#include <iostream>
using namespace std;
int main() {
int a = 10;
int* ptr;
ptr = &a;
cout << "a의 값: " << a << endl;
*ptr = 20; // a의 값을 바꾸는 것과 똑같음.
// 주소가 가리키고있는 변수값 = a.
cout << "a의 값: " << a << endl;
}
포인터를 가리키는 포인터
#include <iostream>
using namespace std;
int main() {
int a = 10;
int* ptr;
ptr = &a;
int** ptr_ptr; // 포인터를 가리키는 포인터
ptr_ptr = &ptr;
cout << "a = " << a << endl;
cout << "&a = " << &a << endl;
cout << "ptr = " << ptr << endl;
cout << "&ptr = " << &ptr << endl;
cout << "ptr_ptr = " << ptr_ptr << endl;
cout << "*ptr_ptr = " << *ptr_ptr << endl;
cout << "**ptr_ptr = " << **ptr_ptr << endl;
}
// 출력
a = 10
&a = 0083F9CC
ptr = 0083F9CC
&ptr = 0083F9C0
ptr_ptr = 0083F9C0
*ptr_ptr = 0083F9CC
**ptr_ptr = 10
복잡하게 생각하지 말자. 복잡해보이지만...ㅠ
a는 10, 주소값(&a)이 F9CC다.
근데 ptr이라는 포인터로 a를 가리켰으니
ptr은 &a고 따라서 F9CC임.
*ptr은 10이겠지~ 변수값(a)이니까.
근데 여기서 한 번 더 감.
a를 가리키는 포인터를, 가리키는 포인터 = ptr_ptr 이라고 두자.
ptr_ptr은 &ptr이고 따라서 F9C0임.
*ptr_ptr은 F9CC이겠지~ 변수값(ptr)이니까.
**ptr_ptr은 10이겠지? 변수값(a)이니까!
'Language > C++' 카테고리의 다른 글
비쥬얼 스튜디오 오류 해결: lnt-arithmetic-overflow (0) | 2023.05.07 |
---|---|
c++ 실행 속도 높이기 (0) | 2021.12.18 |
c++ wntdll.pdb 오류 해결하기 - 기호 서버 체크 (0) | 2021.11.07 |