[C언어] Call By Value & Call By Reference

2023. 6. 16. 17:59·Programming Language/C

Call By Value & Call By Reference

함수로 인자를 전달하는 방식에는 크게 Call by value와 Call by reference 방식이 있다.

 

Call By Value (값에 의한 호출)

함수 호출 시 인자로 전달되는 변수의 값을 함수의 매개변수에 복사하여 전달하는 방식

복사된 인자는 지역 변수의 특성을 가지게 된다. → 매개변수의 값을 변경해도 원래의 변수에는 영향 X

⇒ 원본 값을 바꿀 필요가 없을 때 사용

#include <stdio.h>

void sub(int a)
{
	a = a - 3;
	
	printf("sub 함수의 매개변수 a의 값 : %d\\n", a);
}

int main()
{
	int a = 10;

	printf("sub 함수 실행 전 a 값 : %d\\n", a);
	minus(a);
	printf("sub 함수 실행 후 a 값 : %d", a);
}

출력 결과

출력 결과에서 알 수 있다시피, 메인 함수에서 선언하고 할당한 a의 값은 sub함수를 실행하기 전이나 후나 바뀌지 않는다.

 

 

Call By Reference (참조에 의한 호출)

함수 호출 시 인자의 값으로 주소값을 전달하는 방식

 

C에서는 Call by reference를 지원하지 않는다.

따라서 인자의 값으로 주소값을 전달하기는 하지만 그 주소값도 매개변수에 복사해서 전달한다. (이를 Call by address 방식이라고 한다.)

#include <stdio.h>

void sub(int *a) // 전달된 주소값에 들어있는 값
{
	*a = *a - 3;
	
	printf("sub 함수의 매개변수 a의 값 : %d\\n", *a);
}

int main()
{
	int a = 10;

	printf("sub 함수 실행 전 a 값 : %d\\n", a);
	sub(&a); // 주소값을 매개 변수로 전달
	printf("sub 함수 실행 후 a 값 : %d", a);
}

출력 결과

이렇게 주소값을 직접 전달해 줌으로써 메인 함수가 아닌 다른 함수에서 값을 변경하면 원본도 바뀌게 된다.

저작자표시 비영리 (새창열림)

'Programming Language > C' 카테고리의 다른 글

[C언어] 동적 할당 : malloc()  (0) 2023.09.12
[C언어] 백준 10818번 : 최소, 최대  (0) 2023.09.12
C 포인터(Pointer)  (1) 2023.06.07
백준 2480번 : 주사위 세개  (0) 2022.06.23
C언어 멘토링 | 6주차 [과제] | 백준 2675번, 1157번  (0) 2022.06.01
'Programming Language/C' 카테고리의 다른 글
  • [C언어] 동적 할당 : malloc()
  • [C언어] 백준 10818번 : 최소, 최대
  • C 포인터(Pointer)
  • 백준 2480번 : 주사위 세개
602zzang
602zzang
  • 602zzang
    yks_STUDY
    602zzang
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • Programming Language (36)
        • C (15)
        • PYTHON (9)
        • RUST (12)
      • Reverse Engineering (3)
      • OS (17)
        • LINUX (17)
      • 보안 이슈 (6)
      • Digital Forensics (1)
      • CTF (8)
      • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    c
    umassctf2025
    rust
    TeamH4C
    picoCTF
    P4C
    소켓 통신
    파이썬
    cyberdefenders
    공급망
    보안이슈
    드림핵
    rustling
    Rocky Linux
    코드업
    python
    빡공팟
    보안동향
    bandit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
602zzang
[C언어] Call By Value & Call By Reference
상단으로

티스토리툴바