CODEDRAGON ㆍDevelopment/C, C++
Call By Value vs Call By Reference
두 개의 호출방식의 차이 반드시 숙지
값에 의한 호출(Call By Value)
변수(메모리 공간에 저장된 값) 또는 값을 복사해서 함수 호출
Call By Value 도식도
| //변수 n의 값을 변수 i에 복사
// 10 |
주소에 의한 호출(Call By Reference)
주소(메모리 공간의 주소)를 참조해서 함수 호출
Call By Reference 도식도
| //변수 n의 주소를 포인터 변수 i에 저장
// i는 포인터 변수로 주소값 저장 // i = &n
|
함수의 출력, 입력 형태
구분 | 출력 형태 | 입력 형태 |
XX 형태 | 출력 형태 없음 | 입력 형태 없음 |
XO 형태 | 출력 형태 없음 | 입력 형태 있음 |
OX 형태 | 출력 형태 있음 | 입력 형태 없음 |
OO 형태 | 출력 형태 있음 | 입력 형태 있음 |
값에 의한 호출(Call by value)의 문제
함수의 인자 전달에 사용되는 매개 변수가 많아지게 됩니다.
#include <stdio.h> void func(int a1, int a2, int a3, int a4, int a5, int a6, int a7); int main(void){ int a=10, b=20, c=30, d=40, e=50, f=60, g=70; func(a, b, c, d, e, f, g,); return 0; } void func(int a1, int a2, int a3, int a4, int a5, int a6, int a7){ printf("%d %d %d %d %d %d %d \n", a1, a2, a3, a4, a5, a6, a7); } |
주소에 의한 호출의 필요성
- 배열이나 구조체와 같은 데이터를 함수에 전달할 때 유용
- 실행시간 단축, 메모리 공간 적게 차지함
//sizeof(array: 28byte //sizeof(int): 4byte
// 28/4 = 7
//포인터변수p에 배열array의 시작주소 저장 //변수num에 7 저장 |
'Development > C, C++' 카테고리의 다른 글
Warning-incompatible implicit declaration of built-in function 'malloc' (0) | 2015.08.01 |
---|---|
void형 포인터 (0) | 2015.07.31 |
열거형(enumerate) (0) | 2015.07.31 |
구조체와 함수 - 구조체를 함수의 인자로 전달하기, 구조체를 함수의 반환형으로 전달하기 (0) | 2015.07.30 |
공용체, 구조체 vs 공용체 (0) | 2015.07.30 |