> 백엔드 개발 > C++ > C의 함수에서 배열을 반환하는 방법은 무엇입니까?

C의 함수에서 배열을 반환하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-29 08:05:30
원래의
534명이 탐색했습니다.

How to Return an Array from a Function in C  ?

C 함수에서 배열 반환

포인터를 사용하여 C 함수에서 배열을 반환할 수 있습니다. 그러나 배열이 제대로 할당되지 않으면 문제가 발생할 수 있습니다.

귀하의 예에서는 스택에 할당된 배열을 반환하려고 합니다. 이로 인해 함수가 반환될 때 정의되지 않은 동작이 발생할 수 있습니다.

이 문제를 방지하려면 new 연산자를 사용하여 힙에 배열을 할당할 수 있습니다. 그런 다음 할당된 배열에 대한 포인터를 반환할 수 있습니다.

<code class="C++">int* uni(int *a, int *b) {
    int *c = new int[10];
    int i = 0;
    while (a[i] != -1) {
        c[i] = a[i];
        i++;
    }
    for (; i < 10; i++) {
        c[i] = b[i - 5];
    }
    return c;
}</code>
로그인 후 복사

그런 다음 반환된 포인터를 사용하여 배열에 액세스할 수 있습니다.

<code class="C++">int main() {
    int a[10] = {1, 3, 3, 8, 4, -1, -1, -1, -1, -1};
    int b[5] = {1, 3, 4, 3, 0};
    int *c = uni(a, b);
    for (int i = 0; i < 10; i++) {
        cout << c[i] << " ";
    }
    cout << "\n";
    delete[] c;
    return 0;
}</code>
로그인 후 복사

다음과 같이 출력됩니다.

1 3 3 8 4 1 3 4 3 0
로그인 후 복사
로그인 후 복사

또 다른 대안은 구조체를 사용하여 배열을 래핑하는 것입니다. 이는 값으로 반환될 수 있으며 내부 배열을 포함하여 구조체가 복사됩니다.

<code class="C++">struct myArray {
    int array[10];
};

myArray uni(int *a, int *b) {
    myArray c;
    int i = 0;
    while (a[i] != -1) {
        c.array[i] = a[i];
        i++;
    }
    for (; i < 10; i++) {
        c.array[i] = b[i - 5];
    }
    return c;
}

int main() {
    int a[10] = {1, 3, 3, 8, 4, -1, -1, -1, -1, -1};
    int b[5] = {1, 3, 4, 3, 0};
    myArray c = uni(a, b);
    for (int i = 0; i < 10; i++) {
        cout << c.array[i] << " ";
    }
    cout << "\n";
    return 0;
}</code>
로그인 후 복사

이 결과는 다음과 같습니다:

1 3 3 8 4 1 3 4 3 0
로그인 후 복사
로그인 후 복사

위 내용은 C의 함수에서 배열을 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿