그냥 블로그

[ C++ ] 매개변수( call-by-value, call-by-reference ) 본문

C++/기본 문법 및 개념

[ C++ ] 매개변수( call-by-value, call-by-reference )

코딩하는 공대생 2023. 10. 17. 09:41
반응형

 C++에서는 두 가지 오류의 매개변수가 있어 두 가지 할당 기법이 존재한다. 

1. call-by-value   2. call-by-reference

 

1. call-by-value

call-by-value 매개변수는 &를 사용하지 않고 표시한다.

 

#include <iostream>
using namespace std;

const double RATE = 150.00;

int main(){
	int hours, minutes;
    double bill;
    
    cout << "Welcome to the law office of\n";
    
   cin >>hours >> minutes;
   
   bill = fee(hours, minutes);
   
   cout.setf(ios::fixed);
   cout.setf(ios::showpoint);
   cout.precision(2);
   cout << "For" << hours << "hours and" << minutes << bill << endl;
   
   return 0;
}


doble fee(int hoursWorked, int minutesWorked){
	int quarterHours;
    
    minutesWorked = hoursWorked*60 + minutesWorked;
    quarterHours = minutesWorked/15;
}

위와 같이 함수에 매개변수를 전달 했을 때 hoursWorked를 초기화 하는 것이다. 

 

2. call-by-reference

 

call-by-value 형식 매개변수를 가지면 함수 호출 시 대응하는 인자가 변수일 수 있으나 그 함수는 변수의 값만 가지고 어떤 방법으로도 그 변수를 바꿀 수 없다. 

call-by-reference 형식 매개변수를 가지면 함수 호출시 대응하는 인자가 변수이고 이 인자 변수는 형식 매개변수로 대체된다. 

void getInput(double &receiver);

#include <iostream>
using namespace std;

void getNNumber(int& input1, int& input2);
void swapValues(int& variable1, int& variable2);
void showResults(int output1, int output2);

int main(){
	int firstNum, secondNum;
    
    getNumber(firstNum, secondNum);
    swapValues(firstNum, secondNum);
    sowResults(firstNum, secondNum);
    
    return 0;
}

void getNumbers(int& input1, int& input2){
	cout << "Enter two integers: ";
    cin >> input1 >> input2;
}
void swapValues(int& variable1, int& variable2){
	int temp;
    
    temp = variable1;
    varaible1 = variable2;
    variable2 = temp;
}

void showResults(int output1, int output2){
	cout<<output1 << " " << output2<< endl;
}

5 6

6 5

 

 

 

왜 이런 일이 발생할까??

프로그램 변수는 메모리 위치로 구현된다. 각 메모리 위치는 유일한 주소(address)를 가진다.

컴파일러는 각 변수에 하나의 메모리 위치를 할당한다. 예를 들어 디스플레이 4.2 프로그램이 컴파일될 때, 변수 firstNum은 1010 위치에 할당되고, 변수 secondNum은 1012 위치에 할당된다. 실제로 이 메모리 위치가 변수들이다!

 

아래 함수에서

void getNumbers(int& input1, int& input2);

 

getNumbers(firstNum, secondNum);

으로 호출이 실행되면 인자 이름 firstNum과 secondNum을 갖는 것이 아니라 

각각의 이름과 연관된 메모리 위치 목록을 가진다.

 

 

 

https://cplusplus.com/reference/ios/ios_base/setf/?kw=setf

'C++ > 기본 문법 및 개념' 카테고리의 다른 글

[ C++ ] 오버로딩과 디폴트 인자  (0) 2023.10.18