그 이유에 대한 첫 번째 추측은 단순히 성능 및 메모리 절약 이유와 컴파일러 구현의 용이성 (특히 C가 발명되었을 당시의 컴퓨터 종류) 때문이었습니다. 거대한 값의 배열을 "값으로"전달하는 것은 스택에 큰 영향을 미치는 것으로 보였으며, 각 함수 호출에 대해 전체 배열 복사 작업이 필요하며 컴파일러는 올바른 어셈블리 코드를 출력하기 위해 더 똑똑해야합니다 (마지막 지점은 논란의 여지가 있습니다) . 또한 동적으로 할당 된 배열을 정적으로 할당 된 배열과 같은 방식으로 처리하는 것이 더 어렵습니다 (언어 구문의 관점에서).
편집 : 이 링크에서 일부 부분 을 읽은 후 실제 이유 (및 구조체의 배열이 값 유형으로 처리되는 반면 단독 배열은 그렇지 않은 이유)는 C의 이전 B와의 하위 호환성이라고 생각합니다 . Dennis Ritchie의 인용은 다음과 같습니다.
[...}이 솔루션은 유형이없는 BCPL과 유형 C 사이의 진화 체인에서 결정적인 점프를 구성했습니다. 저장에서 포인터의 구체화를 제거하고 대신 배열 이름이 표현식에 언급 될 때 포인터를 작성했습니다. 오늘날 C에서 유지되는 규칙은 배열 유형의 값이 표현식에 나타날 때 배열을 구성하는 첫 번째 객체에 대한 포인터로 변환된다는 것입니다.
이 발명은 언어 의미의 근본적인 변화에도 불구하고 대부분의 기존 B 코드가 계속 작동 할 수있게했습니다. [..]