전체 코드


🔹 1. 전체 코드 구조

기능설명
SetMessage(const char* a)문자열 포인터를 변경하려 하지만, 원본에는 영향을 주지 않음
SetMessage(const char** a)다중 포인터를 사용하여 원본 포인터 값을 변경
SetMessage2(const char*& a)참조를 사용하여 원본 포인터 값을 변경
main()함수 호출 및 실행 결과 확인

🔹 2. SetMessage 함수 (단일 포인터)

void SetMessage(const char* a) {
    a = "Bye";
}

기능: 포인터 변수 a가 가리키는 값을 "Bye"로 변경하려 하지만,
원본 데이터에는 아무런 영향을 주지 못함

분석:

  • const char* a: aconst char* 타입으로 선언되었으며,
    가리키는 데이터는 변경할 수 없지만 포인터 자체의 값은 변경 가능
  • a = "Bye";: 포인터 a의 값(주소)만 "Bye"를 가리키도록 변경됨
  • 함수 종료 후 a는 사라지므로, 원본 문자열(msg)은 변경되지 않음

📌 예제 실행

const char* msg = "Hello";
SetMessage(msg);
cout << msg << endl;  // 출력: Hello

msg는 여전히 "Hello"를 가리킴


🔹 3. SetMessage 함수 (이중 포인터)

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"로 변경됨


🔹 4. SetMessage2 함수 (참조를 이용한 포인터 변경)

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"를 가리키도록 변경됨


🔹 5. main() 함수

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

이중 포인터와 참조를 활용하면 원본 데이터를 수정할 수 있음


🔹 6. 다중 포인터 개념 정리

선언의미
char* p문자열을 가리키는 포인터
char** pp포인터를 가리키는 이중 포인터
char*& p포인터 자체를 가리키는 참조형 포인터

차이점 정리
| 선언 방식 | 기능 |
|------|------|
| void SetMessage(const char* a) | 단순한 포인터 전달 (원본 변경 불가) |
| void SetMessage(const char** a) | 이중 포인터 사용 (포인터 값 변경 가능) |
| void SetMessage2(const char*& a) | 포인터를 참조로 전달 (포인터 값 변경 가능) |


profile
李家네_공부방

0개의 댓글