아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
하얀고슴도치236
하얀고슴도치23619.05.24

C 언어에서 동적으로 배열크기를 지정하는 방법은 무엇인가요??

C 언어에서 동적으로 배열크기를 지정하는 방법은 무엇인가요??

int a;

scanf(a)

char arr[a] 이런식으로 동적으로 할당해주고 싶은데

할당이 안되네요 사용자로부터 입력받은 크기로 배열을 만들고싶습니다.

malloc ? 포인터? 이런걸 쓰면 된다는거같은데 아직 배우질않아서요

다른 언어처럼 편하게 동적할당 할수있는 방법은 없나요??

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • GCC에서는 char arr[a];로 할당받을 수 있습니다.
    VC++ 등 일부 컴파일러는 가변 길이 배열(Variable Length Array, VLA)을 허용하지 않는데

    컴파일러가 VLA를 허용하지 않는 경우에는 어쩔 수 없이 동적할당을 써야만 합니다.

    C에서 편하게 동적으로 배열 크기를 지정하려면 VLA를 허용하는 GCC같은 컴파일러를 써야 합니다.

    ... 사실 동적 할당이라는 게 컴파일 시점에 크기가 정해지지 않은 할당을 말하는 건 아닙니다.
    스택에 할당받아도 재귀호출이나 VLA로 컴파일 시점에 크기를 알 수 없는 경우도 있습니다.
    스택에는 FIFO로, 순서대로 할당/해제하기 때문에 정적 할당이라고 하고, (빈 공간도 안 생깁니다.)
    힙에는 아무때나 할당/해제하기 때문에 동적 할당이라고 합니다. (할당/해제 순서가 없습니다.)


  • 안녕하세요.

    C언어에서 동적 배열은 포인터를 이용하여 구현할 수 있습니다.

    int *test_array; int size = 0;

    위와 같이 포인터로 구현하고 size를 초기화 합니다.

    그리고 아래와 같이 동적 배열을 구현한 함수를 정의합니다.

    void ReSize(int** test_array,int *size) { (*size)++; *test_array = (int*)realloc(*test_array, sizeof(int) * (*size)); }

    이렇게 하면 함수를 호출할 때마다 배열 크기를 하나씩 늘릴 수 있습니다.

    이를 응용하면 원하는 수로 늘리거나 줄일 수 있습니다.

    감사합니다.