> 백엔드 개발 > C++ > C 및 C 함수 서명의 배열 길이가 무시되는 것처럼 보이는 이유는 무엇입니까?

C 및 C 함수 서명의 배열 길이가 무시되는 것처럼 보이는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-15 06:07:13
원래의
754명이 탐색했습니다.

Why Do Array Lengths in C and C   Function Signatures Seem to Be Ignored?

함수 서명의 배열 길이: 구문론적 호기심

C 및 C의 함수 서명에 배열 길이가 분명히 존재함에도 불구하고 이러한 길이는 효과적으로 무시됩니다. 이 동작은 개발자를 당황하게 만들었고 그 목적에 대한 의문을 제기했습니다.

배열 길이 제어의 환상

다음 C 코드 조각을 고려하세요.

#include <stdio.h>

int dis(char a[1]) {
    return strlen(a);
}

int main() {
    char b[4] = "abc";
    int c = dis(b);
    printf("%d\n", c);
    return 0;
}
로그인 후 복사

이 코드에서 dis 함수는 길이가 1([1])인 문자 배열을 기대합니다. 그러나 사용자는 길이가 4인 배열을 전달합니다(b). 놀랍게도 코드는 오류 없이 컴파일되고 실행됩니다. 이는 함수 시그니처에 지정된 배열 길이가 적용되지 않음을 나타냅니다.

배열 구절의 진정한 특성

C 및 C에서는 배열이 값으로 전달되지 않습니다. . 대신 배열의 첫 번째 요소에 대한 포인터가 전달됩니다. 따라서 이 정보는 포인터에서 파생될 수 있으므로 함수 시그니처의 배열 길이 지정은 중복됩니다.

역사적 근거

허용하기로 결정 함수 시그니처의 배열 길이 지정은 C 초기에 이루어졌는데, 이는 아마도 이전 언어의 유산 때문일 것입니다. 이 구문은 호환성을 위해 유지되었지만 개발자에게는 혼란의 원인이 되었습니다.

결론

C 및 C 함수 시그니처에 배열 길이가 있음 실제로 배열 길이를 강제하지 않는 구문상의 문제입니다. 이 동작은 배열 자체가 아닌 배열 요소에 대한 포인터를 포함하는 기본 전달 메커니즘으로 인해 발생합니다. 이 구문은 불필요해 보일 수 있지만 역사적 기원은 현대 C 및 C 프로그래밍 언어에서 확고히 자리 잡았습니다.

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

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