Programming🧑‍💻/Cpp

함수 호출시 매개변수 전달 방법 3가지

생각 깎는 아이 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으로 변경
}