RedPlus 개인 블로그

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

## 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 1460
다음글 병합 알고리즘 순서도 merge-sort-algorithm(1).png(75 KB) 2022-10-22 2121
관련 페이지 리스트
numtitlenamedateview
388 C 언어에서 값 전달과 참조 전달(Call By Value and Call By Re... Administrator 2023-03-09 1460
387 병합 알고리즘 순서도 2022-10-22 2121
386 C 언어 강의: scanf를 엔터키를 기준으로 여러 행으로 값을 입력 받기 Administrator 2022-01-09 3505
385 C 언어: scanf 사용해서 표준 입력인 콘솔로부터 나이를 정수로 입력 받아 출력 Administrator 2022-01-07 2524
384 Java 코드 샘플 - Function 인터페이스로 람다 식 만들기 Administrator 2022-01-04 2435
383 C# 코드 샘플 - 널 조건부 연산자 사용하기 Administrator 2022-01-02 2468
382 C# 코드 샘플 - 널 병합 연산자와 default 키워드 Administrator 2022-01-02 2400
381 C# 코드 샘플 - 널 병합 연산자로 문자열 변수의 NULL 값 확인하기 Administrator 2022-01-02 2315
380 C# 강의 - 14세 미만 체크 메서드 구현 Administrator 2022-01-01 2350
379 C 언어 천 단위 콤마 찍기 thousands_separator.c Administrator 2021-12-30 3144
378 for 문 순서도 - for 문(for loop) 순서도(flowchart) Administrator 2021-12-28 4989
377 C 언어 코드 샘플 - 전처리기 - 조건부 컴파일 Administrator 2021-12-27 2348
376 C 언어 코드 샘플 - 전처리기 - 매크로 함수 Administrator 2021-12-27 2355
375 http-server 설치하기 - 로컬 루프백 주소로 웹페이지 실행 2021-12-27 2366
374 C 언어 코드 샘플 - N명의 학생의 점수를 입력받아 1차원 배열에 저장 후 총점 구... Administrator 2021-12-27 2379
373 Java 코드 샘플 - 두 수의 합을 구하는 함수 Administrator 2021-12-26 2293
372 C 언어 코드 샘플 - 두 수의 합을 구하는 함수 Administrator 2021-12-26 2317
371 C# 교과서 강좌 - LINQ - Select 확장 메서드에 익명 형식 사용하기 Administrator 2021-12-26 2385
370 C# 교과서 강의 - LINQ - Select 확장 메서드를 사용하여 새로운 형태로 ... Administrator 2021-12-26 2341
369 C 언어 코드 샘플 - static-shared - 정적(공유) 변수 사용하기 Administrator 2021-12-26 2361
 
 
 
손님 사용자 Anonymous (손님)
로그인 Home