>백엔드 개발 >C++ >C와 C가 구조체에서는 멤버별 배열 할당을 허용하지만 독립형 배열에서는 허용하지 않는 이유는 무엇입니까?

C와 C가 구조체에서는 멤버별 배열 할당을 허용하지만 독립형 배열에서는 허용하지 않는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-08 01:12:17277검색

Why Does C and C   Allow Memberwise Array Assignment in Structs but Not for Standalone Arrays?

C와 C에서 구조체 내 멤버별 배열 할당이 지원되는 이유

C와 C에서는 멤버별 배열 할당이 일반적으로 금지되어 있지만 구조체 내에서 지원됩니다. 이러한 명백한 모순은 이러한 언어의 역사적 진화에서 비롯됩니다.

구조체 정의에서 배열은 데이터에 연속적인 메모리를 할당하는 편리한 방법으로 도입되었습니다. 그러나 C의 초기 반복에서 배열은 단지 메모리 영역에 대한 포인터였습니다. 따라서 하나의 배열을 다른 배열에 할당하면 요소별 복사가 아닌 포인터 할당이 발생합니다.

이 동작은 K&R C에 구조체 할당이 추가된 경우에도 지속되었습니다. 구조체에 대해 별도의 할당 연산자를 정의하는 대신 컴파일러는 단순히 메모리 복사 작업(memcpy)을 사용하여 모든 멤버를 할당했습니다. 이는 구조체 내에 배열을 효과적으로 포함했습니다.

결과적으로 구조체 할당은 암시적으로 구조체 컨텍스트 내에서 배열 할당 형식을 도입했습니다. 그러나 이 할당은 구조체 내에서만 제한되었으며, 배열이 구조체에 포함되어 있더라도 다른 배열에 직접 할당하는 것은 여전히 ​​C 및 C에서 지원되지 않습니다.

이러한 구조체 내 배열과 배열 간의 차이점은 다음과 같습니다. 일반 배열은 두 가지 목적으로 사용됩니다:

  • 호환성: 이는 기존 C 코드와의 하위 호환성을 보장합니다. 포인터 산술 및 배열 조작.
  • 유형 안전성: 일반 배열 할당에 명시적 메모리 복사를 요구하면 오류를 방지하고 유형 안전성을 보장하는 데 도움이 됩니다.

위 내용은 C와 C가 구조체에서는 멤버별 배열 할당을 허용하지만 독립형 배열에서는 허용하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.