0. 함수 호출 방법
- c에서 함수가 호출되는 방법은 대표적으로 call by value, call by reference가 있다.
- 실제 인자(actual parameter)
함수에 전달되는 인자(=parameter, 매개변수)
- 형식 인자 (formal parameter)
함수가 전달받은 인자(=argument)
- 함수가 호출될 때, 메모리에 함수를 위한 임시 공간이 생성된다.
이 공간은 함수가 종료되면 사라진다.
메모리 구조 링크
#include <stdio.h>
void func(int formal_parameter){ //형식 인자
//func 호출되면 acual_parameter 값이 formal_parameter에 복사된다.
}
int main(int argc, const char * argv[]) {
int actual_parameter; //실제 인자
func(actual_parameter);
}
1. call by value (값에 의한 호출)
- 함수 호출 시 실제 인자 값이 형식 인자에 복사하는 방식이다.
- 복사된 값은 함수 안에서 지역적으로 쓰이는 local value 특성을 가진다.
따라서 함수 안에서 값을 변경해도 실제 인자의 값은 변경되지 않는다.
2. call by reference (참조에 의한 호출)
- 함수 호출 시 실제 인자의 주소(레퍼런스)를 복사하는 방식이다.
- 주소를 복사하였기 때문에 해당 변수에 직접 접근할 수 있다.
해당 값을 변경하면 실제 인자의 값도 변경된다.
3. 예제 - swap 함수
call by value 와 call by reference를 가장 쉽게 이해할 수 있는 건
입력된 두 수 a, b를 바꾸는 swap 함수이다.
#include <stdio.h>
void swap(int x, int y){
int temp; //swap 하려면 temp 변수 필요하다.
//swap
temp = x;
x = y;
y = temp;
}
void main(){
int a = 10, b = 20;
swap(a, b);
printf("a = %d b = %d\n", a, b);
}
함수에 넘겨준 파라미터가 실제 값이 아니라 복사된 값이기 때문에
함수 내에서는 값이 변경되었을지라도 실제 값은 변경되지 않았다.
실제 값도 변경하려면 아래와 같이 메모리 주소를 넘겨주면 된다.
#include <stdio.h>
void swap(int *x, int *y){
int temp;
//swap
temp = *x;
*x = *y;
*y = temp;
}
void main(){
int a = 10, b = 20;
swap(&a, &b); //메모리 주소를 파라미터로 넘기기
printf("a = %d b = %d", a, b);
}
'c언어' 카테고리의 다른 글
[c언어] 메모리 구조 (0) | 2022.07.06 |
---|