반응형
함수는 어떤 기능을 하거나, 어떠한 입력 값을 줬을 때 그에 따른 출력 값을 뱉어내는 것입니다.
반환자료형 함수이름(매개변수){
함수 내용
}
이렇게 정의합니다.
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 | #include <iostream> using namespace std; //함수 선언 int TotalCal(int score[], int num); int main() { int s[6] = { 100, 90,76,89,100,88 }; int sum = 0; sum = TotalCal(s, 6); //함수 호출 cout << "총점 : " << sum << endl; return 0; } //함수 정의 int TotalCal(int score[], int num) { int i, sum = 0; for (i = 0; i < num; ++i) { sum += score[i]; } return sum; } | cs |
함수 선언은 main 함수 아래에 있는 TotalCal 함수를 식별할 수 있도록 해주는 것입니다.
만약에 함수 선언이 없다면, TotalCal 함수의 정의 부분이 함수를 호출하고 있는 main 함수보다 위에 있어야 합니다.
함수 정의는 그 함수의 기능을 정의해 주는 것입니다.
함수 호출은 그 함수를 쓰기 위해서 인자를 주고 호출하는 것입니다.
간단하게 총점을 구하는 함수였습니다.
Call by Value vs Call by Reference
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 | #include <iostream> using namespace std; //함수 선언 void swap(int a, int b); int main() { int val1 = 10; int val2 = 20; swap(val1, val2); cout << "val1 : " << val1 << endl; cout << "val2 : " << val2 << endl; return 0; } //함수 정의 void swap(int a, int b) { int tmp = a; a = b; b = tmp; cout << "a : " << a << endl; cout << "b : " << b << endl << endl; } | cs |
간단한 Call by Value 함수 예입니다.
Call by Value는 값을 복사해서 전달하기 때문에 원본의 값이 변경될 가능성이 없다는 특징이 있지만, 값을 넘겨줄 때마다 복사하기 때문에 고비용, 복사손실 문제가 발생하는 단점이 있습니다.
보시면 원본 값에는 영향을 미치지 않았습니다.
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 32 | #include <iostream> using namespace std; //함수 선언 void swap(int *a, int *b); int main() { int val1 = 10; int val2 = 20; cout << "Before the swap func" << endl; cout << "val1 : " << val1 << endl; cout << "val2 : " << val2 << endl << endl; swap(&val1, &val2); //함수 호출 cout << "After the swap func" << endl; cout << "val1 : " << val1 << endl; cout << "val2 : " << val2 << endl; return 0; } //함수 정의 void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } | cs |
하지만 Call by Reference 함수를 보면, 주소를 넘겨주기 때문에 큰 배열을 매개 변수로 받을 때 적은 비용이 듭니다. 하지만 원본의 값이 변경될 수도 있다는 위험성을 가지고 있습니다.
원본 값이 변경되었습니다.
반응형
'Programming > C++' 카테고리의 다른 글
[C++] 함수 오버로딩 (0) | 2018.01.22 |
---|---|
[C++] 디폴트 매개변수 (0) | 2018.01.22 |
[C++] 구조체 (0) | 2018.01.21 |
[C++] 동적 할당 (0) | 2018.01.21 |
[C++] 명시적 형변환 (0) | 2018.01.21 |