내용 출처 : YES C (정보공학연구소 /생능출판사)
혼자 연구하는 C/C++ (SoEn.kr /와우북스)
Ⅰ. 값을 주고받는 방식 (call by value)
① 실인수와 가인수가 별도의 기억 장소를 갖고 함수가 호출되면 실인수의 값을 가인수에 복사해서 사용하는 방식
② 데이터 전달이 끝나면 실인수와 가인수간의 상호작용은 없으며 서로 독립적인 값을 갖는다.
③ 값을 주고 받는 방식으로는 실인수의 값을 직접 건드릴 수 없으므로 함수에서 가인수의 값을 리턴해줘야만 한다.
Ⅱ. 주소를 주고받는 방식 (call by reference)
① 가인수가 실인수가 기억된 주소를 전달받아 함수 내에서 실제 실인수를 조작하는 방식.
② 함수의 실인수는 주소로 넘겨줘야 하고, 가인수는 포인터로 받아야한다.
③ 함수내에서 실인수의 값을 직접 건드릴 수 있으므로 값을 전달하기 위한 리턴값이 필요하지 않다.
Ⅲ. 함수의 인수로 배열을 전달하는 경우
① 배열의 이름은 배열의 시작 주소를 가르킨다. 즉 배열의 이름을 인수로 전달한 경우 call by reperence를 이용한 것이다.
② 이때 배열의 시작 주소가 배열 크기에 대한 정보를 갖진 않으므로 프로그래머가 배열의 크기를 알려주어야 한다.
③ 배열의 크기를 알려주는 방법에는 함수 내부에서 배열의 마지막 요소에 있는 어떤 특정 값으로 파악하는 방법과
④ 배열의 크기를 인수로 전달하여 처리하는 방법이 있다.
Ⅳ. 함수의 인수로 문자열을 전달하는 경우
① C언어에서는 문자열을 char형 1차원 배열로 처리하고, 문자열 변수의 이름은 그 배열의 시작 주소이므로 이 또한 call by reperence를 이용한 것이다.
② 문자열 배열의 마지막 요소는 항상 '\0'(널문자)이므로 함수내에서 이를 이용해서 배열의 크기를 파악할 수 있다.