본문 바로가기
프로그래밍 언어/c(일반)

포인터(3) - 포인터&배열 함수인자 전달

by [Akashic Records] 개발의선지자 2024. 7. 12.

해당 글은 개인 공부 정리를 위해 작성되었습니다.

인자 전달 방식

call by value : 함수를 호출할 때 단순히 값을 복사해서 전달하는 함수호출

코드 결과는 다음과 같이 출력되었다 -> 변수 값 교환 불가

c : 100 , d : 200

c : 100 , d : 200 

 

#include <stdio.h>

void swap(int, int);

void swap(int a, int  b)
{
    int temp; 
    temp = a;
    a = b;
    b = temp;
  
}

int main(void)
{

    int c = 100, d = 200;
    printf("1 %d %d\r\n   ", c, d);
    swap(c, d);
    printf("2 %d %d", c, d);

    return 0;
}

 

 

call by reference(call by address) :  변수의 값을 전달하는 것이 아닌, 주소값을 전달하는 함수 호출

코드 결과는 다음과 같이 출력되었다 -> 변수 값 교환 가능

c : 100 , d : 200

c : 200 , d : 100 

 

#include <stdio.h>

void swap(int*, int*);

void swap(int* a, int * b)
{
    int temp; 
    temp = *a;
    *a = *b;
    *b = temp;
  
}


int main(void)
{

    int c = 100, d = 200;
    printf("c : %d d : %d\n   ", c, d);
    swap(&c, &d);
    printf("c : %d d : %d", c, d);

    return 0;
}

 

함수 인자로 배열 전달

매개변수 형태

1. 반환형 함수이름(자료형 매개변수[])
{

}

2. 반환형 함수이름(자료형 *매개변수)
{

}

 

아래 함수 인자로 배열 전달하는 예제이다.

 

출력 결과 : 

10 20 30 40 50 
11 21 31 41 51 
13 23 33 43 53 
16 26 36 46 56 

#include <stdio.h>

void ShowArray(int * param, int len)
{
	for(int i=0; i<len; i++) printf("%d ", param[i]);
    printf("\n");
}

void AddArray(int param[], int len, int add)
{
	for(int i=0; i<len; i++) param[i] += add;
}


int main(void)
{
	int arr[] = {10, 20, 30, 40, 50}; 
    int len  = sizeof(arr) / sizeof(int);
    
    ShowArray(arr, len); //10 20 30 40 50 
    
    AddArray(arr, len, 1);
    ShowArray(arr, len); //11 21 31 41 51 

    AddArray(arr, len, 2);
    ShowArray(arr, len); //13 23 33 43 53 
    
    AddArray(arr, len, 3);
    ShowArray(arr, len); //16 26 36 46 56 
    
    return 0;

}