일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자료구조
- stl
- tfjs
- 풀이
- 적두트리
- 구슬탈출
- 페이지교체알고리즘
- 구현
- LOLIN D32
- OpenVidu
- 백준
- 2623
- 13459
- TDD
- mediastream
- 테스트주도개발
- REACT
- ESP32
- 9996
- 1796
- 백준 2133
- Vite 사용 이유
- WebRTC란
- 메모리계층
- c++
- dp
- 데이터 링크 계층
- 3XN 타일링
- TDD란?
- RBT
- Today
- Total
그냥 블로그
[ C++ ] 매개변수( call-by-value, call-by-reference ) 본문
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을 갖는 것이 아니라
각각의 이름과 연관된 메모리 위치 목록을 가진다.
'C++ > 기본 문법 및 개념' 카테고리의 다른 글
[ C++ ] 오버로딩과 디폴트 인자 (0) | 2023.10.18 |
---|