은근한

C언어 14. call by value,call by reference 본문

카테고리 없음

C언어 14. call by value,call by reference

EsJoo 2013. 11. 20. 19:51

call by value


함수를 호출할 때 넘겨주는 인자의 값을 함수 정의에 있는 매개변수로 복사해서 전달하는 방식


ex) 값에 의한 전달 방법 (call by value)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
 
void swap(int x, int y); //함수선언
 
void main()
{
    int a=10,b=20;
    
    printf("함수호출전 a = %d,b=%d\n",a,b);
    swap(a,b); //함수호출
    printf("함수호출후 a = %d,b=%d\n",a,b);    
}
 
void swap(int x, int y)    //값의 인자가 복사되었다
{                                   
    int temp;                      //값이 복사되었다 함수 내에서는 값이 바뀔지라도
    temp = x;                        //함수가 끝이 나면 원본은 그대로 바뀌지 않고 그대로이다
    x=y;
    y=temp;    
}


call by reference

변수의 값을 복사해서 전달하는 대신 변수의 주소를 전달하는 방식

ex)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
 
void swap(int *x, int *y);
 
void main()
{
    int a =10;
    int b =20;
    
    printf("함수 호출 전의 a=%d ,b =%d\n",a,b);
    
    swap(&a,&b);    //함수 정의에서 포인터로 선언했기에 주소연산자 &를 붙여서 주소값을 전달
    
    printf("함수 호출 후의 a=%d ,b =%d\n",a,b);
    }
    
    
void swap( int *x, int *y) //값을 받을때 주소값을 받기에 주소가 변경되면 다 변경
{
    int temp;
    tep = *x;
    *x = *y;
    *y=temp;
}