C 언어에서 배열과 함수는 함께 사용될 수 있으며, 배열을 함수의 인자로 전달하거나 함수에서 배열을 반환할 수 있습니다. 배열을 함수와 함께 사용할 때는 몇 가지 중요한 개념과 주의사항이 있습니다.
1. 배열을 함수의 인자로 전달
C 언어에서는 배열을 함수에 전달할 때 배열의 이름이 포인터처럼 사용되며, 배열의 첫 번째 요소의 주소가 전달됩니다. 함수에 배열을 전달할 때는 배열의 크기를 함께 전달하는 것이 일반적입니다. 배열의 크기를 알려주지 않으면 함수에서 배열의 크기를 알 수 없기 때문입니다.
배열을 함수에 전달하기
#include <stdio.h> // 배열을 인자로 받는 함수 void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("arr[%d] = %d\n", i, arr[i]); } } int main() { int arr[5] = {10, 20, 30, 40, 50}; printArray(arr, 5); // 배열과 배열의 크기를 전달 return 0; }
위 코드에서 printArray 함수는 배열 arr과 배열의 크기 5를 인자로 받아 배열의 모든 요소를 출력합니다.
2. 배열을 반환하는 함수
C 언어에서는 함수가 배열을 직접 반환할 수 없습니다. 대신, 함수는 배열의 포인터를 반환할 수 있습니다. 배열을 반환하려면 배열을 동적으로 할당하여 반환하거나, 함수 외부에 선언된 배열의 포인터를 반환해야 합니다.
배열의 포인터를 반환하는 함수
#include <stdio.h> #include <stdlib.h> // 동적으로 배열을 생성하고 포인터를 반환하는 함수 int* createArray(int size) { int *arr = (int *)malloc(size * sizeof(int)); // 메모리 동적 할당 if (arr == NULL) { printf("메모리 할당 실패\n"); exit(1); } for (int i = 0; i < size; i++) { arr[i] = i * 10; // 배열 초기화 } return arr; // 배열의 포인터 반환 } int main() { int size = 5; int *arr = createArray(size); // 동적으로 할당된 배열의 포인터 받기 // 배열 출력 for (int i = 0; i < size; i++) { printf("arr[%d] = %d\n", i, arr[i]); } free(arr); // 동적으로 할당된 메모리 해제 return 0; }
위 코드에서 createArray 함수는 동적으로 배열을 생성하고 배열의 포인터를 반환합니다. main 함수에서 이 포인터를 사용하여 배열의 요소를 출력하고, 마지막에 free를 호출하여 동적으로 할당된 메모리를 해제합니다.
3. 다차원 배열과 함수
다차원 배열을 함수에 전달할 때는 배열의 모든 차원 크기를 지정해야 합니다. 함수의 인자에서 다차원 배열을 사용할 때는 배열의 마지막 차원 크기만 생략할 수 있습니다.
다차원 배열을 인자로 받는 함수
#include <stdio.h> #define ROWS 2 #define COLS 3 // 2차원 배열을 인자로 받는 함수 void printMatrix(int matrix[ROWS][COLS]) { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]); } } } int main() { int matrix[ROWS][COLS] = { {1, 2, 3}, {4, 5, 6} }; printMatrix(matrix); // 2차원 배열 전달 return 0; }
위 코드에서 printMatrix 함수는 2차원 배열 matrix를 인자로 받아 배열의 모든 요소를 출력합니다.
4. 배열과 함수 포인터
함수 포인터를 사용하여 배열의 요소를 함수로 전달하거나 함수 포인터를 배열로 다루는 것도 가능합니다.
함수 포인터를 사용한 예제
#include <stdio.h> // 함수 타입 정의 typedef void (*FuncPtr)(int); // 배열을 함수 포인터로 다루는 예제 void printElement(int elem) { printf("요소: %d\n", elem); } int main() { FuncPtr funcArr[1] = {printElement}; // 함수 포인터 배열 int arr[] = {10, 20, 30}; // 배열의 요소를 함수 포인터를 통해 처리 for (int i = 0; i < 3; i++) { funcArr[0](arr[i]); // 배열의 각 요소를 함수 포인터로 처리 } return 0; }
위 코드에서 FuncPtr 타입의 함수 포인터 배열 funcArr를 사용하여 배열의 각 요소를 printElement 함수로 처리합니다.
5. 배열과 함수의 상호작용
배열과 함수의 상호작용을 통해 다양한 기능을 구현할 수 있습니다. 배열을 함수에 전달하고, 함수에서 배열의 요소를 수정하거나, 배열을 반환하여 결과를 처리하는 등 배열과 함수의 조합은 매우 유용합니다.