본문 바로가기

programming language/C 언어

배열을 함수의 인자로 전달받기(p314)

<예제>

#include<stdio.h>
    
void showarray(int* param, int len)
{
	int i;
	for (i = 0; i < len; i++)
	
	printf("%d", param[i]);
	printf("\n");
}

void add(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, };
	add(arr, sizeof(arr) / sizeof(int), 1);
	showarray(arr, sizeof(arr) / sizeof(int));

	add(arr, sizeof(arr) / sizeof(int), 2);
	showarray(arr, sizeof(arr) / sizeof(int));

	add(arr, sizeof(arr) / sizeof(int), 3);
	showarray(arr, sizeof(arr) / sizeof(int));
    
	return 0;
}

<참고>

void showarray(int* param, int len) , void add(int* param, int len, int add) 이 두문장은 아래와 같이 바뀔 수 있다.

void showarray(int param [ ] , int len), void add(int param[ ] , int len, int add)와 같이 말이다.

 

즉, int * param 과 int param [ ]는 완전히 동일한 선언이다. 일반적으로 배열의 주소 값이 인자로 전달될 때에는 

int param[ ] 형태의 선언을 주로 사용한다.

 

그렇지만, 이 둘이 같은 선언으로 인정되는 것은 매개변수의 선언으로 제한이 된다.


#include<stdio.h>
int main(void)
{
  int arr[3] = {1,2,3};
  int * ptr =arr;
  ..........

이 코드를 보면 int * ptr = arr;의 문장이 있는데, int ptr [ ] =arr;로 대체가 가능할까? 절대 불가능이다.

즉 둘을 같은 선언으로 보는것은 매개 변수의 선언으로만 제한이 된다는 것을 알아두어야 한다.