인자의 전달 원리에 대한 확실한 이해가 필요하다.
"함수 호출 시 전달되는 인자의 값은 매개변수에 복사가 된다."
int SimpleFunc(int num){...}
int main(void)
{
int age = 15;
SipleFunc(age)
}
즉 인자와 매개변수는 완전히 별개가된다.
실제로 전달되는 것은 age가 아닌 age에 저장된 값이다.
그 값이 매개변수 num에 복사되는 것이다.
따라서 age와 num 값을 주고 받은 사이 일 뿐 그이상을 아무 관계가 없다.
배열을 통째로 넘겨 받으려면 매개변수로 배열을 선언할 수있어야 하는데,
이것은 허용되지 않으니 함수 내에서 배열에 접근할 수 이는 배열의 주소 값을 전달한다.
#include <stdio.h>
void ShowArayElem(int * param, int len)
{
int i ;
for(i = 0 ; i < len ; i ++ )
printf("%d", param[i]);
printf("\n");
}
void AddArayElem(int * param, int len, int add)
{
int i;
for(i = 0 ; i < len ; i ++)
param[i] += add;
}
int main(void)
{
int arr[3] = {1, 2, 3};
AddArayElem(arr, sizeof(arr) / sizeof(int), 1);
ShowArayElem(arr, sizeof(arr) / sizeof(int));
return 0;
}
두 함수에는 int형 배열의 주소 값을 인자로 전달받을 수 있도록 int 형 포인트 변수가
선언 되었다.
void ShowArayElem(int *param, int len){...};
void AddArayElem(int *param, int len, int add){...};
int *param 대신하여 int param[]을 선언할 수도 있다.
void ShowArayElem(int param[], int len){...};
void AddArayElem(int param[], int len, int add){...};