>백엔드 개발 >C++ >가변 길이의 C 배열을 초기화할 수 없는 이유는 무엇입니까?

가변 길이의 C 배열을 초기화할 수 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-15 09:05:11547검색

Why Can't I Initialize a C   Array with a Variable Length?

변수 및 숫자 리터럴을 사용한 배열 초기화 이해

문제:

C에서, int n = 10과 같은 가변 길이로 배열을 초기화하려고 합니다. double tenorData[n] = {1, 2, 3, ...}, 컴파일 오류가 발생합니다. 그러나 double tenorData[10]과 같이 고정 길이로 초기화하면 성공합니다. 왜 이런 일이 발생합니까?

답변:

C에서는 가변 크기 배열이 허용되지 않습니다. 특정 컴파일러(예: G )의 확장은 이를 허용하지만 표준에 따르면 여전히 불법입니다. C에서 가변 길이의 배열을 생성하려면 다음 중 하나를 수행합니다.

  • 메모리를 동적으로 할당합니다. 포인터를 사용하여 수동으로 메모리를 할당하지만 나중에 할당을 해제하는 것을 잊지 마세요.
  • 표준 컨테이너 사용: std::Vector와 같은 컨테이너를 활용하여 동적 메모리를 처리합니다.

여전히 배열이 필요한 경우 변수 대신 상수 값 사용을 고려하세요.

  • 상수: 배열 크기를 다음과 같이 선언합니다. const int n = 10과 같은 상수; double a[n];, 상수는 컴파일 타임에 평가됩니다.
  • Constexpr (C 11 ): 함수에 의해 결정되는 값의 경우 constexpr을 사용하세요. 이 역시 컴파일 타임에 표현식도 평가합니다.

위 내용은 가변 길이의 C 배열을 초기화할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.