포인터와 함수관계 ( 함수의 인자로 배열 전달 )

NOAH·2021년 2월 22일
0

값의 복사, 인자의 전달원리(매개변수 != 인자)

인자의 전달 원리에 대한 확실한 이해가 필요하다.

"함수 호출 시 전달되는 인자의 값은 매개변수에 복사가 된다."


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){...};

0개의 댓글