배열(Array)은 여러 개의 관련된 데이터 항목들을 하나의 공통된 이름으로 저장하는 자료구조입니다. C 언어에서는 배열을 통째로 함수에 인수로 전달할 수 있으며, 이번 글에서는 그 방법을 예제와 함께 자세히 알아보겠습니다.
배열 선언하기
배열을 선언하는 기본 문법은 다음과 같습니다.
datatype array_name [size];
예를 들어 정수형 배열을 선언하려면 다음과 같이 작성합니다.
int a[5];
배열 초기화하기
배열은 크게 두 가지 방법으로 초기화할 수 있습니다.
- 컴파일 시간(Compile time) 초기화
- 런타임(Runtime) 초기화
또한 배열은 선언과 동시에 초기화할 수도 있습니다.
int a[5] = {100, 200, 300, 400, 500};함수란 무엇인가?
함수(Function)는 특정하고 명확하게 정의된 작업을 수행하는 독립적인 코드 블록입니다. C 언어에서 배열을 함수의 인수로 전달하는 방법은 두 가지가 있습니다.
- 배열 전체를 하나의 인수로 함수에 전달하는 방법
- 배열의 개별 요소들을 각각 인수로 전달하는 방법
이 글에서는 첫 번째 방법, 즉 배열 전체를 함수 인수로 전달하는 방법을 중점적으로 살펴보겠습니다.
배열 전체를 함수 인수로 전달하기
배열 전체를 함수에 전달할 때는 다음 두 가지 규칙을 기억해야 합니다.
- 전달: 함수 호출 시 배열 이름만 인수로 넘기면 됩니다. 배열 이름은 곧 배열의 시작 주소를 의미합니다.
- 수신: 함수 헤더(매개변수 부분)에서 배열 형태로 이를 받아야 합니다.
예제 1: 배열 요소 출력하기
다음은 사용자로부터 5개의 정수를 입력받아 배열에 저장한 후, 별도의 함수에서 해당 배열의 모든 요소를 출력하는 프로그램입니다.
#include<stdio.h>
main ( ){
void display (int a[5]);
int a[5], i;
clrscr( );
printf ("enter 5 elements");
for (i=0; i<5; i++)
scanf("%d", &a[i]);
display (a); // 배열 이름 'a'를 사용해 배열 전체 전달
getch( );
}
void display (int a[5]) { // 배열 전체 수신
int i;
printf ("elements of the array are");
for (i=0; i<5; i++)
printf("%d ", a[i]);
}실행 결과
위 코드를 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.
Enter 5 elements 10 20 30 40 50 Elements of the array are 10 20 30 40 50
예제 2: 배열 요소 역순으로 출력하기
다음은 배열에 입력된 요소들을 역순(reverse order)으로 출력하는 C 프로그램입니다.
#include<stdio.h>
void main(){
// 배열 선언 - 런타임 초기화 //
int array[5],i;
void rev(int array[5]);
// 배열에 요소 입력받기 //
printf("Enter elements into the array:
");
// for 반복문 //
for(i=0;i<5;i++){
// 사용자 입력 읽기 //
printf("array[%d] :",i);
scanf("%d",&array[i]);
}
// 배열 요소를 역순으로 출력 //
printf("The elements from the array displayed in the reverse order are :
");
rev(array); // 배열 이름을 사용해 배열 전체 전달
getch();
}
void rev(int array[5]){ // 배열 전체 수신
int i;
for(i=4;i>=0;i--){
// 결과 출력 //
printf("array[%d] :",i);
printf("%d
",array[i]);
}
}실행 결과
위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.
Enter elements into the array: array[0] :23 array[1] :34 array[2] :12 array[3] :56 array[4] :12 The elements from the array displayed in the reverse order are: array[4] :12 array[3] :56 array[2] :12 array[1] :34 array[0] :23
정리
C 언어에서 배열 전체를 함수에 전달하는 것은 사실 배열의 시작 주소를 넘기는 방식으로 동작합니다. 따라서 함수 내부에서 배열 요소를 수정하면 원본 배열에도 그 변경이 반영됩니다. 함수 호출 시에는 배열 이름만 전달하고, 함수 정의 쪽에서는 매개변수를 배열 형태로 선언하면 됩니다. 이 두 가지 원칙만 기억하면 배열을 활용한 다양한 프로그래밍이 훨씬 수월해집니다.