배열의 크기를 변수로 설정하기

조회수 18696회
int cnt;
const int * cntptr = &cnt;

cin >> cnt;

int arr[*cntptr];

도 안되구..

도대체 변수의 크기를 변수로 받는 법은 없을까요> ㅠㅠ

2 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    C++ 표준에서는 배열의 크기를 컴파일타임에 결정합니다. 따라서 배열의 크기는 일반 변수로 정해질 수 없으며 컴파일 타임 상수를 통해 정해져야 합니다.

    대신 배열과 특성이 유사한 가변 크기를 갖는 컨테이너인 vector가 있습니다.

    vector는 가변 크기 배열로 생각 하시면 되며, 사용 방법 또한 거의 유사합니다. 크기를 변경하기 위한 resize()를 제공하고 있습니다.

    int cnt;
    cin >> cnt;
    std::vector<int> arr(cnt);
    

    첨언으로 C++ 표준에서 변수를 통한 배열 크기 지정을 허용하지는 않지만 몇몇 컴파일러에서 옵션을 통해 지원하고 있기는 합니다. 그리고 C 99 표준에서는 변수를 통한 배열크기 지정이 가능해졌으나, C++은 C언어의 내용을 완전히 포함하지 않아 이를 허용하지 않습니다.

    • 감사합니다! Promixium 2018.9.27 15:07
    • c99 표준에서 된다고 나와서 C++은 당연히 되는줄 알았어요 ㅋㅋ Promixium 2018.9.27 15:07
  • 어떤 배열이든 만드는게 목적이라면, C++이니 new 키워드로 동적할당 하시면 런타임에 변수로 크기를 지정받는 배열 생성은 가능할 겁니다.

    #include <iostream>
    
    int main()
    {
        int size;
        std::cin >> size;
    
        int *arr = new int[size];
        delete[] arr;
    
        return 0;
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)