포인터의 기본 개념
포인터는 변수를 가리키는 변수이며, 메모리 주소를 저장하고 있는 변수이다.
int num = 147;
int* pointer = #
cout << num << endl; // 변수 값 출력
cout << pointer << endl; // num의 주소 출력
cout << *pointer << endl; // 역참조를 통한 값 출력
cout << &num << endl; // 주소 출력
역참조를 통해 포인터가 가리키는 변수의 값을 변경할 수 있다.
*pointer = 100;
cout << num << endl; // 100
cout << *pointer << endl; // 100
여러 포인터 변수와 주소 확인
같은 주소를 가리키는 여러 포인터를 선언할 수 있다.
int num = 123;
int* pNum0 = #
int* pNum1 = #
int* pNum2 = pNum0;
cout << &num << endl;
cout << pNum0 << endl;
cout << pNum1 << endl;
cout << pNum2 << endl;
포인터 선언 시 해석
포인터 선언은 "해당 주소값을 어떤 타입으로 해석할 것인가"를 의미한다.
int num = 1;
int* pNum = # // int형 데이터를 가리키는 포인터
const 키워드와 포인터
const의 위치에 따라 의미가 달라진다.
가리키는 값을 변경할 수 없는 경우
const int* pNum = #
*pNum = 10; // 에러 발생
pNum = &num0; // 주소 변경 가능
포인터 자체의 주소를 변경할 수 없는 경우
int* const pNum = #
pNum = &num0; // 에러 발생
*pNum = 10; // 값 변경 가능
유니언과 타입 캐스팅
유니언은 하나의 메모리 공간을 여러 타입으로 공유하는 구조이다.
union Union
{
int i;
float f;
double d;
};
유니언 인스턴스를 다양한 포인터로 캐스팅하여 접근할 수 있다.
Union u;
Union* up = &u;
int* ip = (int*)&u;
float* fp = (float*)&u;
double* dp = (double*)&u;
u.i = 1;
cout << *ip << endl; // 1
cout << *fp << endl; // 같은 메모리를 float로 해석
cout << *dp << endl; // 같은 메모리를 double로 해석
'C++' 카테고리의 다른 글
[C++] Array range-based for (0) | 2025.05.31 |
---|---|
[C++] Array (0) | 2025.05.29 |
[C++] enum class & enum struct (0) | 2025.05.28 |
[C++] enum (0) | 2025.05.27 |
[C++] Union 유니온 (0) | 2025.05.26 |