-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형의 포인터 */
....
}
'dev, tech > c, c++' 카테고리의 다른 글
연결리스트 (0) | 2006.04.07 |
---|---|
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> 2차원 배열과 포인터 (3) (0) | 2006.04.07 |
포인터 #6 (배열의 첨자) (0) | 2006.04.06 |
함수에서 인자를 넘기는 방식 (0) | 2006.04.06 |
포인터 #5 (함수포인터) (0) | 2006.04.06 |
댓글