Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags more
Archives
Today
Total
관리 메뉴

냥집사의 개발일지

C언어 - 데이터 공유 (call by value, call by reference) 본문

C언어

C언어 - 데이터 공유 (call by value, call by reference)

깅햄찌 2022. 9. 13. 19:17
반응형

안녕하세요 오늘은 c언어에서 데이터 공유하는 방법에 대해 알아보겠습니다. 

아래 목차 순으로 정리해보겠습니다. 

1. call by value

2. call by reference 

 

 

1. call by value

call by value 방법은 값을 복사해서 전달하는 방법입니다.

아래 코드는 main함수에 선언된 지역변수 temp가 random_func 함수의 인수가 되어 random_func 함수에 선언된 지역변수 temp로 값이 복사된 call by value의 예제입니다. 

#include <stdio.h>

void random_func(int temp){
    printf("temp : %d\n",temp);
}

int main(){
    int temp = 5;
    random_func(temp);
    return 0;
}

main 함수에 선언된 지역변수 temp의 값 5가 random_func 함수에 선언된 지역변수 temp에 할당되었습니다. 

따라서 random_func 함수에 선언된 지역변수 temp가 5를 출력하는 것을 확인할 수 있습니다. 

 

2. call by reference

call by reference방법은 주소 값을 복사해서 전달하는 방법입니다.

아래 코드는 main함수에 선언된 지역변수 temp의 주소 값이 random_func 함수의 인수가 되어

random_func 함수에 선언된 포인터 ptemp가 temp를 가리키게 됩니다.

#include <stdio.h>

void random_func(int* ptemp){
    printf("temp : %d\n",*ptemp);
}

int main(){
    int temp = 5;
    random_func(&temp);
    return 0;
}

main 함수에 선언된 지역변수 temp의 주소 값 이 random_func 함수에 선언된 포인터 ptemp에 할당되었습니다.

따라서 random_func 함수에 선언된 포인터 ptemp가 가리키는 값으로 5를 출력하는 것을 확인할 수 있습니다. 

 

(주소) 값 반환을 통해서도 데이터 공유가 가능합니다.

아래 코드는 값 반환을 통해 더하기 연산을

주소 값 반환을 통해 빼기 연산을 하였습니다. 

(주소 값 반환 시 정적 변수나 전역 변수 같이 프로그램이 종료되기 전까지 메모리에서

사라지지 않는 변수만이 주소를 할당받아 반환할 수 있습니다. )

#include <stdio.h>

int add_func(int t1, int t2){
    return t1+t2;
}

int* sub_func(int t1, int t2){
    static int result;
    result = t1-t2;
    return &result;
}

int main(){
    int t1 = 7;
    int t2 = 3;
    int r1;
    int* r2;
    r1 = add_func(t1,t2);
    printf("add result : %d\n",r1);
    r2 = sub_func(t1,t2);
    printf("sub result : %d\n",*r2);
    return 0;
}

데이터 공유가 정상적으로 되어 의도한 결과가 나온 것을 확인할 수 있었습니다. 

 

오늘은 c언어에서 데이터 공유하는 방법에 대해 알아보았습니다. 

1. call by value

2. call by reference 

추가로 (주소) 값 반환을 통한 데이터 공유하는 방법까지 정리했습니다. 

 

다음 포스팅에서 만나요~

좋은 하루 보내세요!!

Comments