본문 바로가기
dev, tech/c, c++

포인터 #7(배열을 함수의 인자로 넘기는 방법)

by 구띵 2006. 4. 6.

-1차원 배열을 함수의 인자로 넘기기

C에서 배열의 크기는 메모리 공간을 할당할 때만 필요하지 실행시에는 배열의 크기에 대해서 컴파일러가 신경써주지 않는다.

 

그래서, 함수가 배열을 인자로 받을 때 그 배열이 몇 개의 요소를 가지는지는 전혀 알 방법이 없다.

 

해결 방법으로,

 

 1.배열 자체에 배열의 끝을 나타내는 요소가 있으면배열의 크기를 넘길 필요가 없다.

    대표적인 예로, 문자열을 다룰 때 쓰인다. char형의 배열을 구현하는데 특별히 문자열의 크기에 신경을 쓰지 않음을 알고 있을 것이다. 그것은 배열의 끝을 나타내는 0(NULL)이 문자열의 끝에 붙어 있기 때문이다.

    배열에 실제 데이터를 저장하기 위해 이용할 수 있는 유연성이 감소된다.

 

 2.함수에게 인수로서 배열의 크기를 전달하는 것이다. 함수는 2개의 인수를 전달 받는다.

    첫번째 배열 요소에 대한 포인터와 그 배열에 있는 요소들의 수를 나타내는 정수가 그것이다.

 

 

-2차원 배열을 함수의 인자로 넘기기

 

2차원 배열도 마치 1차원 배열인 것 처럼 사용하기

 - 2차원 배열의 연산을 프로그래머가 직접 하겠다는 것으로,

    이때, 1차원 배열인 것처럼 인자를 다루어야 한다.

 

void input_matrix(int *m, int n)

{

      int i, j;

 

      printf("\n input %d by %d Maxtix int row order -> ",n,n);

   

      for(i=0; i<n;i++)

           for(j=0;j<n;j++)

               scanf("%d",m + i*n + j);

}

 

호출할 때,

 

void main(void)

{

     int mat[2][2];

     input_matrix(&mat[0][0], 2); /* &mat[0][0] 은 int형의 포인터 */

....

}

 

댓글