"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++가 함수에서 배열 반환을 직접 지원하지 않는 이유는 무엇입니까?

C++가 함수에서 배열 반환을 직접 지원하지 않는 이유는 무엇입니까?

2024년 11월 18일에 게시됨
검색:177

Why doesn't C   directly support returning arrays from functions?

C가 배열 반환 함수를 승인하지 않는 이유

C 환경

Java와 같은 언어와 달리 C는 배열을 반환하는 함수에 대한 직접적인 지원을 제공하지 않습니다. 배열을 반환할 수 있지만 프로세스가 번거롭습니다. 이는 이 설계 결정의 기본 이유에 대한 의문을 제기합니다.

C의 배열 메커니즘

이를 이해하려면 C 배열의 기본 사항을 탐구해야 합니다. C에서 배열 이름은 배열 자체가 아닌 메모리 주소를 나타냅니다. 배열은 스택(int array[n]) 또는 힙(int* array = (int*) malloc(sizeof(int)*n))에 할당되어 메모리 관리에 영향을 미칩니다.

범위 및 메모리 액세스

배열을 반환하는 가상 함수를 생각해 보세요.

int[] foo(args){
    int result[n];
    // Code...
    return result;
}

이 함수 외부에서 메모리에 액세스할 때 문제가 발생합니다. 결과 배열의 메모리가 함수 호출의 스택 범위 내에 있지 않습니다. 이로 인해 메모리 접근성을 유지하기 위해 참조로 배열을 전달하는 색다른 접근 방식이 필요합니다.

Java의 접근 방식

Java는 모든 것이 값으로 효과적으로 전달되는 다른 패러다임을 사용합니다. 그러나 이러한 값은 종종 메모리 주소를 나타내므로 반환 값이 포인터를 사용하여 효과적으로 배열됩니다. Java는 효율성 문제에도 불구하고 메모리 관리를 자동으로 처리합니다.

C의 실용주의

C는 C의 성능을 향상시키도록 설계되었으며 자동 메모리 관리를 피함으로써 차별화됩니다. 이 결정은 배열 반환 함수를 직접 구현하지 않기로 한 선택에 영향을 미쳤습니다. 템플릿 클래스가 이를 달성할 수 있지만 C 배열을 반환하는 것은 Java의 접근 방식과 일치하지만 편의성이 없는 힘든 프로세스로 남아 있습니다.

결론

배열에 대한 C의 입장 성능에 대한 우려로 인해 함수 반환이 발생했습니다. 직접적인 지원을 제공하지 않음에도 불구하고 C에서는 기존 C 접근 방식을 사용하여 배열을 반환할 수 있으므로 개발자가 메모리 관리에 대한 낮은 수준의 제어를 수행할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3