포인터를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!