상수 배열 바인딩 요구 사항에도 불구하고 C의 가변 길이 배열
C에서는 바인딩된 배열이 상수 표현식이어야 한다고 명시되어 있습니다. 그러나 특정 코드 시나리오에서는 이 규칙을 위반해도 오류가 발생하지 않는 것으로 보입니다. 다음 예를 고려하십시오.
#include <iostream> using namespace std; int main(){ int n=10; int a[n]; for (int i=0; i<n; i++) { a[i]=i+1; cout<<a[i]<<endl; } return 0; }
교과서에 따르면 이 코드는 n이 상수 표현식이 아니기 때문에 오류를 발생시킵니다. 놀랍게도 Mac의 Xcode4에서는 완벽하게 실행됩니다. 이 명백한 모순을 설명하는 것은 무엇입니까?
답은 VLA(가변 길이 배열)라는 C99 기능에 있습니다. 주로 C에서 사용되지만 특정 컴파일러는 C에서도 VLA를 지원합니다. 이 맥락에서 int a[n]은 int a[10]과 유사한 스택에 공간을 할당하는 VLA입니다.
따라서 위의 코드는 가변 길이 n의 VLA를 사용합니다. 이 기능을 사용하면 배열 경계가 기술적으로 상수 표현식이 아니더라도 동적으로 결정된 크기로 배열을 생성할 수 있습니다.
위 내용은 상수 배열 바운드 규칙에도 불구하고 가변 길이 배열이 이 C 코드에서 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!