> 백엔드 개발 > C++ > C 및 C에서는 배열을 직접 할당할 수 없지만 구조체 내에서는 할당할 수 있는 이유는 무엇입니까?

C 및 C에서는 배열을 직접 할당할 수 없지만 구조체 내에서는 할당할 수 있는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-05 20:08:15
원래의
732명이 탐색했습니다.

Why Can't I Directly Assign Arrays in C and C  , But I Can Within Structs?

C와 C의 배열 할당

C와 C는 구조체 내에서 멤버별 배열 할당을 허용하지만 일반적으로는 그렇지 않습니다. 이 동작은 언어의 역사적 진화의 결과입니다.

처음에 C의 배열은 "요리된 배열"이라고 알려진 메모리의 포인터로 모델링되었습니다. 구조가 도입되었을 때 구조 내의 배열은 메모리 안전성을 보장하기 위해 다르게 처리되었습니다. 이를 통해 기존 코드와의 호환성을 손상시키지 않고 구조체 내에서 멤버별로 배열을 할당할 수 있었습니다.

반대로, C의 원래 디자인에서는 구조체 외부의 배열 할당이 지원되지 않았습니다. 이는 포인터 리베이스에 대한 우려와 함수 매개변수로 선언된 배열에 대한 크기 정보 부족 때문이었습니다. 버그 및 호환성 문제 발생을 방지하기 위해 memcpy를 사용한 명시적 할당이 선호되었습니다.

그러나 Luther Blissett가 언급한 것처럼 구조 할당에 관한 C 사양에서는 포함된 배열의 멤버별 할당을 명시적으로 허용합니다. 이는 디자인의 의도하지 않은 부작용이었지만 기존 패턴을 깨지 않고 구조체 내에서 데이터 복사를 용이하게 하는 방법으로 수용되었습니다.

따라서 일반적으로 지원되지 않는 구조체 내 배열의 멤버별 할당 지원은 C의 초기 디자인 결정과 그에 따른 언어의 진화의 유산으로 인해 구조 내에 내장된 배열과 독립적으로 사용되는 배열이 구분됩니다.

위 내용은 C 및 C에서는 배열을 직접 할당할 수 없지만 구조체 내에서는 할당할 수 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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