반응형
📌 요약: 포인터 | 주소연산자 | 포인터 변수 | 역참조 | 참조자 | 값/주소/참조에 의한 호출 | 포인터 크기 및 주의사항
📌 포인터와 참조
C++에서는 메모리 주소를 직접 다룰 수 있는 포인터와 참조자 기능을 통해 효율적인 메모리 관리와 함수 호출 방식을 제어할 수 있습니다.
🔍 값에 의한 호출 / 주소에 의한 호출
함수에 매개변수를 전달할 때, 값 자체를 복사해서 전달하면 원본은 바뀌지 않으며,
주소(포인터)를 전달하면 원본 데이터에 직접 접근하게 되어 값을 바꿀 수 있습니다.
// 값에 의한 호출
void CallByValue(int Value) {
Value = 10;
}
// 주소에 의한 호출
void CallByAddress(int* ptr) {
*ptr = 10;
}
📍 주소연산자 (&)
&변수명을 통해 해당 변수의 메모리 주소를 얻을 수 있습니다.
int num = 5;
cout << "num에 저장된 데이터 : " << num << endl;
cout << "num이 저장된 메모리 주소 : " << &num << endl;
📦 포인터 변수
포인터는 메모리 주소를 저장하는 변수입니다. 선언 시 자료형 뒤에 *를 붙이며, 포인터의 자료형은 가리키는 대상과 동일해야 합니다.
int num = 100;
int* ptr = #
cout << "num에 저장된 데이터 : " << &num << endl;
cout << "ptr에 저장된 데이터 : " << ptr << endl;
🔁 포인터 역참조 (*)
포인터가 가지고 있는 주소를 따라가 해당 주소의 값을 직접 읽거나 수정할 수 있습니다.
int num = 100;
int* ptr = #
cout << "num : " << num << endl;
cout << "*ptr : " << *ptr << endl;
*ptr = 20;
cout << "num : " << num << endl;
cout << "*ptr : " << *ptr << endl;
⚠️ 포인터 사용 시 주의사항
포인터는 반드시 초기화해야 합니다. 초기화되지 않은 포인터는 쓰레기값을 참조하여 프로그램에 치명적 오류를 일으킬 수 있습니다.
int* ptr;
*ptr = 20; // 위험! 쓰레기 주소에 접근
int* ptr2 = nullptr;
*ptr2 = 20; // 예외 발생 (안전 처리)
📐 포인터의 크기
포인터의 크기는 운영체제 비트수에 따라 달라집니다. 32bit 시스템은 4바이트, 64bit는 8바이트를 사용합니다.
int* iPtr;
float* fPtr;
double* dPtr;
cout << sizeof(iPtr) << endl;
cout << sizeof(fPtr) << endl;
cout << sizeof(dPtr) << endl;
🧩 함수 호출 방식 비교
📌 값 전달
int num = 0;
cout << "num의 값은 : " << num << endl; // 0
CallByValue(num); // 값 복사됨 → 원본 변화 없음
cout << "num의 값은 : " << num << endl; // 0
📌 주소 전달
CallByAddress(&num); // 주소 전달 → 원본 수정 가능
cout << "num의 값은 : " << num << endl; // 10
🧷 참조자 (Reference)
참조자는 변수의 또 다른 이름으로, 포인터 없이도 원본 데이터에 접근하여 수정할 수 있는 안전한 방식입니다.
int num = 10;
int& ref = num;
ref = 20;
cout << "num : " << num << endl;
cout << "ref : " << ref << endl;
🔁 참조에 의한 호출
참조자를 함수 매개변수로 사용하면 **원본을 직접 수정**할 수 있습니다.
void CallbyReference(int& ref) {
ref = 10;
}
int num = 0;
CallbyReference(num);
cout << "num의 값은 : " << num << endl; // 10
반응형
'C++ > 기본' 카테고리의 다른 글
| [C++] 8. 메모리 속성 (0) | 2025.03.29 |
|---|---|
| [C++] 7. 메모리 (0) | 2025.03.29 |
| [C++] 5. 함수 (0) | 2025.03.29 |
| [C++] 4. 반복문 (0) | 2025.03.29 |
| [C++] 3. 조건문 (0) | 2025.03.29 |