개념/c++

C++ 함수 - 매개변수

웅드 2023. 11. 17. 20:22

참조(reference)

  • 미리 정의된 변수의 실제 이름 대신 사용할 수 있는 대용 이름을 말한다
  • 함수의 매개변수에 사용된다.

 

c++의 구조체는 원본이 아니라 그 복사본을 만들어서 복사본에 대해 작업한다.

참조를 매개변수로 사용하게 된다면 그 함수는 복사본이 아니라 원본의 데이터를 가지고 작업을 하게 된다.

만약 구조체의 볼륨이 크다면 함수에서 포인터 대신에 참조를 사용하는 것이 실행속도 측면에 유리하게 코딩하는 방법이다.

int a;
int& b = a; //a에 대한 참조 변수

&는 주소 연산자인 동시에 참조 연산자로서의 기능을 수행하고 있다.

이러한 참조 변수의 방식으로 매개 변수를 전달하는 것을 참조로 전달한다 라고 한다.

 

전달하는 방식에는 총 3가지가 존재한다.

  • 값으로 전달하는 방식
  • 포인터로 전달해주는 방식
  • 참조로 전달해주는 방식
void swapA(int& a, int& b);
void swapB(int* a, int* b);
void swapC(int a, int b);

int main(){

    int alpha = 100;
    int beta = 200;
    
    cout << "alpha = " << alpha << ", beta = " << beta << endl; // 100 , 200 출력
    swapA(alpha, beta);
    cout << "alpha = " << alpha << ", beta = " << beta << endl; // 200, 100 출력
    swapB(&alpha, &beta);
    cout << "alpha = " << alpha << ", beta = " << beta << endl; // 100, 200 출력
    swapA(alpha, beta);
    cout << "alpha = " << alpha << ", beta = " << beta << endl; // 100, 200 출력
}

//참조로 전달하는 방식
void swapA(int& a, int& b){

	int temp;
    
    temp = a;
    a = b;
    b = temp;
}
//포인터로 전달하는 방식
void swapB(int* a, int* b){

	int temp;
    
    temp = *a;
    *a = *b;
    *b = temp;
}
//값으로 전달하는 방식
void swapC(int a, int b){

	int temp;
    
    temp = a;
    a = b;
    b = temp;
}

 

기본적으로 함수에게 값으로 내용을 전달할 때는 함수는 그 값에 대한 복사본을 만들어서 작업을 하기 때문에

작업 이후의 내용을 따로 return해준 다음 다시 메인함수에서 그것을 저장해주는 과정이 없는 한 원본에 대한 내용에 침해되지 않는다.

 

복사본이 아닌 원본에 대해 작업을 하기 위해서는 참조를 이용해서 값을 전달하거나, 포인터를 이용해서 값을 전달하는 방법으로

그 원본에 대한 데이터에 직접적으로 접근할 수 있다.

반응형