검색결과 리스트
글
함수의 이해 / 데이터 전달
언어로그/C/C++
2010. 12. 10. 19:50
1. 함수가 필요한 이유?
- 중복된 작업을 함수로 분리하면, 한번 작성으로 여러번 사용할 수 있어서 효율적인 프로그램이 된다.
- 또한 큰 문제를 작은 문제들로 나누어 이해하기 쉬워지며, 수정사항이 발생하면 함수 부분만 수정하면 되기 때문에 유지보수도 용이해진다.
2. 함수의 원형(프로토타입)과 정의
- C언어에서 함수는 원형(프로토타입)과 정의로 분리된다.
- 함수의 원형(프로토타입)은 보통 헤더파일이나 메인함수 이전에 선언이 되며, 컴파일러에게 이러 이러한 함수를 아래에 정의했으니까 메인함수 또는 특정함수에서 이 함수를 사용해도 됨을 알려주는 것이다.
- 함수의 정의는 실제적으로 함수가 하는 일을 기술하는 부분이다. C언어에서는 함수의 시그니처로 함수의 이름만을 사용하기 때문에, 파라미터의 타입과 반환값의 타입이 달라도 동일한 이름의 함수를 사용 할 수 없다.
#include <stdio.h>
void swap(int , int);// 함수원형(프로토타입)
int main() {
...
return 0;
}
void swap(int a, int b) { // 함수의 정의
...
}
3. Call By Value vs Call By Reference
- 함수 호출시 파라미터를 넘기는 방식에 따라 Call By Value 또는 Call By Reference 라고 구분한다.
- 함수 호출시 변수들의 데이터(값)가 복사되는데, 함수 내에서 이 복사된 변수에 대한 조작은 원본 변수에 아무런 영향을 미치지 못하는데 이러한 호출방식을 Call By Value라고 부른다.
- 파라미터로 변수의 주소를 넘기면, 피호출자 쪽에서는 이 주소를 조작하여 원본 변수의 데이터를 변경할 수 있다. 이러한 호출방식을 Call By Pointer 또는 Call By Reference 라고 부른다.
Call By Value
main() {
int a = 1, b = 5;
swap(a, b);// 변수의 값을 전달함
}
void swap(int a, int b) {// main함수의 a, b는 변경되지 않음
int temp = a;
a = b;
b = temp
}
Call By Reference
main() {
int a = 1, b = 5;
swap(&a, &b);// 변수의 주소를 전달함
}
void swap(int *a, int *b) { // main함수의 a, b가 변경됨
int temp = *a;
*a = *b;
*b = temp;
}
'언어로그 > C/C++' 카테고리의 다른 글
| C 프로그램 실행과정 (0) | 2011.02.22 |
|---|---|
| C 언어란? (0) | 2011.02.22 |
| 비트필드 (0) | 2010.12.10 |
| 함수의 이해 / 데이터 전달 (0) | 2010.12.10 |
| 과제 #3 함수, 포인터의 사용 (0) | 2010.12.10 |
| 과제#4 배열과 문자열 (0) | 2009.10.03 |