프로그래밍 언어/c(일반)
포인터(3) - 포인터&배열 함수인자 전달
[Akashic Records] 개발의선지자
2024. 7. 12. 12:29
해당 글은 개인 공부 정리를 위해 작성되었습니다.
인자 전달 방식
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;
}