[C언어] (call by value) vs (call by Reference)

Yerin·2023년 4월 10일

값에 의한 호출 (call by value)

인수 값이 서브루틴의 매개변수에 복사됨
-> 서브루틴의 매개변수에서 일어나는 변화는 부모함수의 실 인수에 영향을 미칠 수 없음

참조에 의한 호출 (call by reference)

인수가 저장된 메모리의 시작 주소가 서브루틴의 매개변수에 복사됨
-> 서브루틴의 매개변수에서 일어나는 변화는 부모함수의 실 인수에 영향을 미칠 수 있음

배열이 함수의 인수로 전달된다면 항상 call by reference 이다
-> 배열을 함수에 전달할 때 배열의 시작주소만 전달됨

const 지정자는 무엇인가?

const 키워드를 이용하여 변수를 상수화 시킬 수 있다.
또한 포인터 변수가 참조하는 값을 포인터 변수를 통하여 값을 변경시키지 못하게 할 수 있다.

const int num = 100; // num 은 상수화 되었으므로 값 변경 x

int salary - 2700000;
const int *ptr = salary; //  ptr이 참조하는 내용 변경 불가
//그러나 변수 자신은 새로운 주소로 변경될 수 있다.

키워드 const의 의미

  • const int num = 10;
    -> 변수 num을 상수화
  • const int *ptr1 = &val1;
    -> 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없음
  • int * const ptr2 = &val2;
    -> 포인터 ptr2가 상수화 됨
  • const int * const ptr3 = &val3;
    -> 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없음
profile
재밌는 코딩 공부

0개의 댓글