728x90
C언어에서 함수는 배열 자체를 직접 반환할 수 없습니다. 배열은 함수 내부에서 선언되면 지역적으로 존재하며, 함수가 종료되면 메모리에서 소멸됩니다. 따라서 배열을 반환하는 시도는 컴파일 오류로 이어집니다.
배열을 반환하려면 배열 자체가 아닌 배열의 포인터를 반환하거나, 전역(static) 배열을 사용하거나, 호출자가 전달한 배열에 값을 채우는 방식 등을 사용해야 합니다.
● 오류 예제
// 잘못된 예시
int[] getArray() {
int arr[3] = {1, 2, 3};
return arr; // 오류 발생
}
이 경우 컴파일러는 배열을 반환하는 것이 불가능하다고 판단하여 다음과 같은 오류를 출력합니다.
error: function cannot return array type ‘int[3]’
● 해결 방법
배열 대신 포인터를 반환하거나, 전역/static 배열을 사용하면 문제를 해결할 수 있습니다.
#include <stdio.h>
int* getArray() {
static int arr[3] = {1, 2, 3}; // static으로 선언
return arr;
}
int main() {
int *p = getArray();
for (int i = 0; i < 3; i++) {
printf("%d ", p[i]);
}
return 0;
}
출력 결과:
1 2 3
● 실전 팁
- 함수는 배열이 아닌 포인터만 반환할 수 있습니다.
- 배열을 반환하려면 static 배열을 사용하거나, 매개변수로 배열을 전달받아 그 안에 값을 채우는 방식으로 처리하세요.
- heap 메모리를 사용한 동적 할당도 가능하지만, 사용 후 반드시 해제를 고려해야 합니다.
배열은 C언어에서 포인터와 밀접한 관계를 가지고 있지만, 함수 반환값으로 배열 자체를 사용할 수는 없습니다. 대신 포인터를 통해 간접적으로 접근하는 구조를 이해하고 적절히 활용해야 합니다.
728x90