RedPlus 개인 블로그

시삽: 레드플러스 님 
게시판 이동:
 제목 : C 언어에서 값 전달과 참조 전달(Call By Value and Call By Reference)
글번호: 388
작성자: Administrator ( 레드플러스 / redplus@live.com )
작성일: 2023/03/09 오후 11:43:21
조회수: 4209

## C 언어에서 값 전달과 참조 전달(Call By Value and Call By Reference)

C 언어에서 함수에 인자를 전달할 때, 값을 복사하여 전달하는 "값 전달(Call By Value)" 방식과 메모리 주소를 전달하여 원래 변수의 값을 변경하는 "참조 전달(Call By Reference)" 방식이 있습니다. 이번 글에서는 이 두 방식을 사용하는 예제 코드를 살펴보고자 합니다.

우선, 값 전달 방식을 사용하여 변수의 값을 증가시키는 함수 `increase_by_12()`와 참조 전달 방식을 사용하여 변수의 값을 증가시키는 함수 `increase_by_15()`를 작성해보았습니다.

// call_by_value_and_reference.c
#include <stdio.h>

// 값 전달(Call By Value)을 이용하여 변수의 값을 12 증가시키는 함수
void increase_by_12(int value) 
{
    value += 12;
}

// 참조 전달(Call By Reference)을 이용하여 변수의 값을 15 증가시키는 함수
void increase_by_15(int* value) 
{
    *value += 15;
}

// Entry Point
int main(void) 
{
    int num = 7;

    // 값을 전달하여 num 값을 증가시키는 함수 호출
    increase_by_12(num);

    num++; // num = 8

    printf("값 전달 후 메인 : %d\n", num); // [1] 8

    // 주소를 전달하여 num 값을 증가시키는 함수 호출
    increase_by_15(&num);

    num++; // num = 24

    printf("참조 전달 후 메인 : %d\n", num); // [2] 24

    return 0;
}

위 코드에서 `increase_by_12()` 함수는 값 전달 방식을 사용하여 `value`라는 변수에 `num`의 값을 복사한 후 이를 증가시킵니다. 따라서 `num`의 값은 증가되지 않습니다.

반면, `increase_by_15()` 함수는 참조 전달 방식을 사용하여 `value`라는 변수에 `num`의 메모리 주소를 전달한 후 이를 증가시킵니다. 따라서 `num`의 값도 함께 증가됩니다.

위 예제 코드를 실행하면 다음과 같은 결과가 출력됩니다.

```output
값 전달 후 메인 : 8
참조 전달 후 메인 : 24
```

이번 글에서는 C 언어에서 함수의 인자를 전달하는 두 가지 방식인 값 전달과 참조 전달에 대해 살펴보았습니다. 값 전달 방식은 인자 값을 복사하여 전달하므로 원래 변수의 값을 변경할 수 없다는 단점이 있습니다. 따라서 변수의 값을 변경하려면 참조 전달 방식을 사용해야 합니다.

 

끝.


 

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트


관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 (이전 글이 존재하지 않습니다.)
현재글 C 언어에서 값 전달과 참조 전달(Call By Value and Call By Re... - Administrator 2023-03-09 4209
다음글 병합 알고리즘 순서도 merge-sort-algorithm(1).png(75 KB) 2022-10-22 5808
관련 페이지 리스트
numtitlenamedateview
266 15. 새로운 나만의 테마(Theme) 만들기(자식 테마 만들기) Administrator 2011-06-11 4710
265 14. 테마(Theme) 다운로드 및 적용 Administrator 2011-06-09 4493
264 13. Content Localization(컨텐트에 대한 다국어 처리) Administrator 2011-06-09 4732
263 12. 검색(Search) 기능 구현하기 Administrator 2011-06-09 4814
262 11. Chapters 모듈 설치 및 적용 Administrator 2011-06-08 4369
261 Visual Studio 2010 &ndash; 클래스 뷰(Class View) Administrator 2011-06-08 4524
260 31. 페이지 추가시 &ldquo;add a widget layer&rdquo; 링크... Administrator 2011-06-08 4541
259 10. 위젯(Widget) 추가 및 빙맵(BingMap) 모듈 적용하기 Administrator 2011-06-07 4579
258 9. Windows Live Writer를 사용하여 블로그 아티클 작성하기 Administrator 2011-06-07 4477
257 6. 다국어 처리 : 한글 언어팩 설치 Administrator 2011-06-07 4954
256 8. 레이어(Layer) 만들기 Administrator 2011-05-31 4581
255 7. 미디어(이미지&hellip;) 관리 Administrator 2011-05-31 4602
254 5. 위젯(Widget)으로 메인에 HTML 조각 삽입하기 Administrator 2011-05-31 4383
253 4. 블로그 모듈 추가 및 아티클 작성하기 Administrator 2011-05-31 4206
252 3. 페이지(Pages) 추가하기 Administrator 2011-05-31 4345
251 2. Orchard CMS 설치 Administrator 2011-05-31 4316
250 1. Orchard CMS 개발 환경 구축&ndash;WebPlatformInstal... Administrator 2011-05-30 4500
249 Managing Users and Roles Administrator 2011-05-27 4158
248 21. Orchard 사이트 설정(Settings) 변경 Administrator 2011-05-26 4360
247 32. Command-Line Interface 사용하기 Administrator 2011-05-26 5164
 
 
 
손님 사용자 Anonymous (손님)
로그인 Home