목차
- Pointers (포인터) 생성
- Dereference (역참조) - 메모리 주소 및 값 얻기
- Dereference Modify (역참조 수정)
Pointers (포인터) 생성
1.
& 연산자 사용해 변수의 메모리 주소 얻기 배웠는데,
포인터는 변수의 메모리 주소를 값으로 갖는 것 말함.
2.
포인터는 변수와 동일 자료형으로 선언.
3.
포인터는 자료형 바로 뒤에 * 연산자 붙임. (※ 3가지 모두 가능.)
① string* hz; // 가장 선호됨.
② string *hz;
③ string * hz;
[예제]
#include <iostream>
#include <string>
using namespace std;
int main() {
string hz = "Homzzang.com"; // 변수 선언.
string* ptr = &hz; // 포인터 선언.
cout << hz << "\n"; // Homzzang.com (변수)
cout << &hz << "\n"; // 0x7fff7ccfc300 (변수의 메모리 주소)
cout << ptr << "\n"; // 0x7fff7ccfc300 (포인터)
return 0;
}
Dereference (역참조) - 메모리 주소 및 값 얻기
포인터를 사용해 변수 메모리 위치 알 수 있는데,
포인터 앞에 * 연산자 붙이면 변수값 확인 가능.
#include <iostream>
#include <string>
using namespace std;
int main() {
string hz = "Homzzang.com";
string* ptr = &hz;
cout << ptr << "\n"; // 0x7fff88923840 (포인터)
cout << *ptr << "\n"; // Homzzang.com (역참조)
return 0;
}
PS. 주의.
* 기호는 '포인터 생성'과 '역참조' 모두에 사용되니 주의.
① 선언에 사용 O 경우, 포인터 생성. (예) string*ptr
② 선언에 사용 X 경우, 역참조. (예) *ptr
Dereference Modify (역참조 수정)
역참조 값 수정 가능.
이 때, 변수 값도 함께 수정되나, 포인터 (= 메모리 위치)는 불변.
[예제]
#include <iostream>
#include <string>
using namespace std;
int main() {
string hz = "Homzzang.com";
string* ptr = &hz; // 포인터 선언
cout << hz << "\n"; // 변수값 (Homzzang.com)
cout << &hz << "\n"; // 메모리주소 (0x7ffc282938f0)
cout << ptr << "\n"; // 포인터 (0x7ffc282938f0)
cout << *ptr << "\n"; // 역참조 (Homzzang.com)
*ptr = "홈짱닷컴"; // 역참조 값 수정.
cout << *ptr << "\n"; // 새 역참조 (홈짱닷컴)
cout << ptr << "\n"; // 포인터 (0x7ffdcc3fbc60)
cout << &hz << "\n"; // 메모리주소 (0x7ffc282938f0)
cout << hz << "\n"; // 새 변수값 (홈짱닷컴)
return 0;
}