C++

[C++] Pointer 포인터

햇썽이 2025. 5. 31. 18:53

포인터의 기본 개념

포인터는 변수를 가리키는 변수이며, 메모리 주소를 저장하고 있는 변수이다.

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 = &num;
int* pNum1 = &num;
int* pNum2 = pNum0;

cout << &num << endl;
cout << pNum0 << endl;
cout << pNum1 << endl;
cout << pNum2 << endl;

포인터 선언 시 해석

포인터 선언은 "해당 주소값을 어떤 타입으로 해석할 것인가"를 의미한다.

int num = 1;
int* pNum = &num; // int형 데이터를 가리키는 포인터

const 키워드와 포인터

const의 위치에 따라 의미가 달라진다.

가리키는 값을 변경할 수 없는 경우

const int* pNum = &num;
*pNum = 10; // 에러 발생
pNum = &num0; // 주소 변경 가능

포인터 자체의 주소를 변경할 수 없는 경우

int* const pNum = &num;
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