| 기능 | 설명 |
|---|---|
SetMessage(const char* a) | 문자열 포인터를 변경하려 하지만, 원본에는 영향을 주지 않음 |
SetMessage(const char** a) | 다중 포인터를 사용하여 원본 포인터 값을 변경 |
SetMessage2(const char*& a) | 참조를 사용하여 원본 포인터 값을 변경 |
main() | 함수 호출 및 실행 결과 확인 |
void SetMessage(const char* a) {
a = "Bye";
}
✅ 기능: 포인터 변수 a가 가리키는 값을 "Bye"로 변경하려 하지만,
원본 데이터에는 아무런 영향을 주지 못함
✅ 분석:
const char* a: a는 const char* 타입으로 선언되었으며,a = "Bye";: 포인터 a의 값(주소)만 "Bye"를 가리키도록 변경됨 a는 사라지므로, 원본 문자열(msg)은 변경되지 않음 📌 예제 실행
const char* msg = "Hello";
SetMessage(msg);
cout << msg << endl; // 출력: Hello
➡ msg는 여전히 "Hello"를 가리킴
void SetMessage(const char** a) {
*a = "Bye";
}
✅ 기능:
이중 포인터를 사용하여 원본 포인터가 가리키는 값을 변경
✅ 분석:
const char** a:a는 포인터를 가리키는 포인터 *a = "Bye";:a가 가리키는 포인터 값을 "Bye"로 변경 msg)를 변경할 수 있음 📌 예제 실행
const char* msg = "Hello";
SetMessage(&msg);
cout << msg << endl; // 출력: Bye
➡ msg의 값이 "Bye"로 변경됨
void SetMessage2(const char*& a) {
a = "Ref Bye";
}
✅ 기능:
참조를 사용하여 포인터가 가리키는 값을 변경
✅ 분석:
const char*& a: a = "Ref Bye";:a가 가리키는 값(주소)을 "Ref Bye"로 변경 📌 예제 실행
const char* msg = "Hello";
SetMessage2(msg);
cout << msg << endl; // 출력: Ref Bye
➡ msg가 "Ref Bye"를 가리키도록 변경됨
int main()
{
const char* msg = "Hello";
SetMessage(msg);
cout << msg << endl; // 출력: Hello
const char** pp = &msg;
SetMessage(&msg);
cout << msg << endl; // 출력: Bye
SetMessage2(msg);
cout << msg << endl; // 출력: Ref Bye
return 0;
}
✅ 실행 흐름:
1. SetMessage(msg) 실행 → 원본 영향 없음 (msg는 "Hello" 유지)
2. SetMessage(&msg) 실행 → msg가 "Bye"를 가리키도록 변경
3. SetMessage2(msg) 실행 → msg가 "Ref Bye"를 가리키도록 변경
📌 출력 결과
Hello
Bye
Ref Bye
➡ 이중 포인터와 참조를 활용하면 원본 데이터를 수정할 수 있음
| 선언 | 의미 |
|---|---|
char* p | 문자열을 가리키는 포인터 |
char** pp | 포인터를 가리키는 이중 포인터 |
char*& p | 포인터 자체를 가리키는 참조형 포인터 |
✅ 차이점 정리
| 선언 방식 | 기능 |
|------|------|
| void SetMessage(const char* a) | 단순한 포인터 전달 (원본 변경 불가) |
| void SetMessage(const char** a) | 이중 포인터 사용 (포인터 값 변경 가능) |
| void SetMessage2(const char*& a) | 포인터를 참조로 전달 (포인터 값 변경 가능) |