> 백엔드 개발 > C++ > C 및 C 함수 서명이 효과가 없는 배열 길이를 허용하는 이유는 무엇입니까?

C 및 C 함수 서명이 효과가 없는 배열 길이를 허용하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-26 03:10:17
원래의
341명이 탐색했습니다.

Why Do C and C   Function Signatures Allow Array Lengths That Have No Effect?

함수 서명의 배열 길이: 혼란스러운 이상

C 및 C에서 함수 서명에는 대괄호로 묶인 배열 길이가 포함되는 경우가 많습니다. 예에서와 같이:

int dis(char a[1])
{
    int length = strlen(a);
    char c = a[2];
    return length;
}
로그인 후 복사

그러나 이 구문은 위의 코드가 선언된 배열 길이를 초과하는 요소에 성공적으로 액세스한다는 사실에서 알 수 있듯이 실제적인 효과는 없습니다. 이로 인해 질문이 제기됩니다. 왜 컴파일러는 이렇게 중복되는 것처럼 보이는 표기법을 허용합니까?

답은 C 및 C의 배열 처리 구현 세부 사항에 있습니다. C와 C의 배열은 배열의 첫 번째 요소를 가리키는 주소입니다. 배열이 함수에 전달되면 주소가 복사되어 사실상 포인터가 전달됩니다.

위의 예에서 dis 함수는 선언된 길이가 1인 문자 배열 a를 사용합니다. 그러나 이후 배열은 포인터로 전달되며 길이 지정은 관련이 없으며 인덱스가 선언된 길이를 초과하더라도 함수는 배열의 모든 요소에 액세스할 수 있습니다.

매개변수 구문의 이러한 불일치는 이 언어의 초기에 도입된 이후 수십 년 동안 논쟁의 주제였습니다. 일부는 보다 일관된 구문을 주장하는 반면 다른 일부는 현재 동작을 유지하는 이유로 레거시 코드와의 호환성을 언급했습니다.

혼란을 초래할 수 있음에도 불구하고 함수 시그니처에서 길이가 지정되지 않은 배열에 대한 허용은 부산물입니다. C 및 C 배열의 포인터 기반 구현. 이는 서로 다른 언어 기능 간의 상호 작용으로 인해 발생할 수 있는 미묘한 뉘앙스를 상기시키는 역할을 합니다.

위 내용은 C 및 C 함수 서명이 효과가 없는 배열 길이를 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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