C Language [핵심정리] - 38
1. 함수에서 배열 매개변수 사용
함수에서 배열을 매개변수로 사용하면 연속된 값을 전달할 수 있으며, 함수 내에서 전달 된 배열의 요소들을 수정할 수 있습니다. 함수에서 배열을 매개변수로 사용하려면 괄호 안에 매개변수 뒤 대괄호(크기 지정 X)를 사용하거나 포인터로 지정해주면 되요.
제가 저번시간에 대괄호에 들어가는 배열 크기를 생략한다고 했는데,, 그렇게 되면 함수에서는 배열의 실제 크기를 알지 못하기 때문에 그를 이용한 코드를 작성하고 나중에 수정할 때 에러 사항이 생깁니다. 그래서 sizeof(배열) / sizeof(자료형)을 통해 배열의 크기를 매개변수로 동시에 주게 된다면 배열의 크기를 알아 코드 작성이 용이할 뿐 만 아니라 유지보수 하는데도 도움이 됩니다.
여러분이 알고있는 것처럼 배열 또한 포인터의 일종입니다. 처음 요소의 주소를 가리키고 있는 포인터 말이죠. 애초에 포인터가 아니었다면 함수를 정의할 때 매개변수로 포인터를 주지 못했겠죠. 그렇기 때문에 함수 내부에서 배열의 요소를 수정한다면 그 수정된 결과는 외부에도 영향을 줍니다.
이번에는 대괄호 대신 포인터로 지정해보겠습니다.
여기서 또한 포인터 이므로 배열의 요소를 변경하면 외부의 요소 또한 변경됩니다. 그 성질을 이용해 특정 요소의 값을 바꿀 수 있습니다.
결과를 보시면 배열 또한 외부의 값에 영향을 미친다는 것을 다시 한번 확인할 수 있습니다.
만약 복합 리터럴을 사용한다면 굳이 main 함수에서 배열을 넘겨줄 때 배열을 선언하지 않아도 됩니다. (해당 기능은 C99부터 추가되었으니 DEV C++같은 컴파일러들에는 해당되지 않으니 주의가 필요합니다.)
이제 2차원 배열을 매개변수로 주는 방법에 대해 알아보시죠. 2차원 배열은 매개변수 명 뒤 [][가로크기] 를 사용해서 가로 크기를 지정하거나 괄호로 묶은 포인터 뒤 []를 사용하고 가로 크기를 지정하면 됩니다. 설명만 들으니, 1차원 배열보다 어렵게 느껴지죠?
저희가 2차원 배열을 매개변수로 할 때 첫 번째 대괄호에는 세로크기를 지정하더라도 무시됩니다. 따라서 arr[ ][3]의 실제 크기는 알 수 없기 때문에 다른 매개변수로 배열의 가로와 세로크기를 받아와야 합니다.
이제 2차원 배열을 매개변수로 사용할 때 포인터와 대괄호를 사용해보겠습니다. (방금은 대괄호만 이용했습니다.)
+ 2차원 배열의 복합 리터럴 사용
2차원 배열 또한 복합 리터럴을 사용해 함수에 값을 넘겨줄 수 있습니다.