C언어 독학 배열을 인자로 전달하기
C언어 독학 배열을 인자로 전달하기
배열이란 같은 자료형을 여러 개 모아 놓은 데이터의 형식인데요. 이 데이터를 함수에 인자로 전달할 수 있을까요? 지금까지 공부하면서 정리했던 대로 배열의 이름은 포인터 변수와 와 똑같은 역할을 하기 때문에 배열의 이름을 인자로 전달하면 그 배열의 첫 번째 요소의 주소 값이 전달됩니다. 하지만 함수에서는 매개변수로 배열을 사용할 수 없기 때문에 난관에 부딪치게 되는데요. 이때 매개변수에 포인터 변수는 사용할 수가 있습니다. 즉 배열로 전달하고 포인터 변수로 받아서 그 주소 값을 찾아가면 되는 거예요. 포인터 변수와 배열은 모두 변수의 메모리상의 주소 값을 저장하는 역할을 하기 때문에 가능한 것입니다. 말이 좀 어렵네요. ㅎㅎ 그래도 배열을 전달하고 포인터 변수로 받으면 된다는 개념은 잡고 예제에서 확인해보겠습니다.
▲ 예제에서는 main() 함수에서 int형 배열 arr을 선언하고 aaa() 함수를 호출하면서 배열을 전달하고 있습니다. 이렇게 배열을 인자로 던져주면 첫 번째 값인 1의 주소 값이 전달됩니다. (이 개념을 잘 모르시는 분들은 앞쪽 글들을 참고하시면 도움이 좀 될 겁니다.)
■ 그렇게 전달된 주소 값은 int *bbb 포이터 변수에 저장하게 되고 bbb[4]처럼 배열 형식으로 그 값에 접근해서 데이터를 출력하고 있는 모습입니다. 프로그램이 제대로 실행된다면 arr[]의 네 번째 요소인 '5'가 출력되겠죠? 실행해서 확인해보겠습니다.
▲ 제대로 값을 찾아가서 출력되는 걸 확인할 수 있습니다. 이처럼 배열을 인자로 던져주는 것은 배열 자체를 보내는 게 아니고 그 배열 이름이 가리키는 첫 번째 요소의 메모리상의 주소 값을 전달하는 것입니다. 그리고 호출된 함수에서는 그 값을 포인터 변수에 저장해서 배열과 같은 형식으로 요소에 접근하는 것입니다.
이렇게 해서 배열을 인자로 전달하고 포인터 변수로 받아서 활용하는 간단한 예제를 살펴봤습니다. 수고하셨어요.