ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수 호출시 매개변수 전달 방법 3가지
    Programming🧑‍💻/Cpp 2025. 2. 5. 23:29

    값에 의한 전달 ( Pass by Value ) 

    • 함수 호출시 매개 변수의 복사본이 호출된 함수의 스택 메모리에 생성됩니다. 
    • 원본 데이터와 완전히 독립된 메모리 공간을 사용합니다. 
    • 함수 종료시 복사본은 스택에서 자동으로 해제 됩니다. 
    void processData(int data) {
        data = data + 1;  // 값을 복사했기 때문에 원본 데이터에 영향 없음
    }
    
    int main() {
        int value = 5;
        processData(value); 
        print("value=%d",value); // value 값은 여전히 5
    }

     

    포인터에 의한 전달 ( Pass by Pointer )

    • 메모리 주소값만 복사되어 전달됩니다.
    • 포인터 자체는 호출된 스택 프레임내에 생성되지만 크기는 항상 고정됩니다. ( 비트 시스템에 따라 크기 결정 )
    • 호출된 함수 내에서 넘겨 받은 메모리 주소를 통해 원본 데이터에 직접 접근이 가능합니다. 
    void processData(int* data) {
        *data = *data + 1;  // 주소값을 넘겨 받아 원본 데이터를 수정
    }
    
    int main() {
        int value = 5;
        processData(&value); 
        print("value=%d",value); // value 값이 6으로 변경
    }

     

    참조에 의한 전달 ( Pass by Reference )

    참조란 포인터의 역참조를 안전하게 추상화한것으로 실제로는 메모리 주소를 넘겨받지만 해당 메모리 주소의 값이 필요할 때 포인터를 역참조할 필요없이 일반 변수와 같은 형태로 접근이 가능합니다. 
    • 컴파일러 수준에서 원본 데이터의 별칭을 생성합니다. 
    • 내부적으로는 포인터와 동일하게 구현되지만 문법적으로 더 안전하고 직관적입니다. 
    void processData(int& data) {
        data = data + 1;  // 주소값을 넘겨 받아 원본 데이터를 수정
    }
    
    int main() {
        int value = 5;
        processData(value); 
        print("value=%d",value); // value 값이 6으로 변경
    }

    댓글

Designed by Tistory.