inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

10.17 변수로 길이를 정할 수 있는 배열

10-17. 변수로 길이를 정할 수 있는 배열

해결된 질문

198

이재완

작성한 질문수 28

2

안녕하세요. 제가 설명하는 내용이 맞는지 몰라 질문드립니다.

제 설명의 틀린 부분을 지적해주시면 감사하겠습니다.

 

visual studio가 아닌 온라인 c compiler를 이용하면 가변 길이 변수를 사용할 수 있습니다.

가변 길이 변수를 이용하면,

int sum2d_4(int row, int col, int ar[row][col]) // row 생략 가능

{

    int r, c, tot = 0;

    for (r = 0; r < row; r++)

        for (c = 0; c < col; c++)

            tot += ar[r][c];

    return tot;

}

이와 같은 함수를 사용할 수 있습니다.

int sum2d_2(int ar[][COLS], int row)

{

    int r, c, tot = 0;

    for (r = 0; r < row; r++)

        for (c = 0; c < COLS; c++)

            tot += ar[r][c];

    return tot;

}

이 함수와 달리, symbolic constant(매크로)를 사용하지 않고 함수의 매개변수 만으로 배열 메모리에 접근하여 함수의 기능을 구현할 수 있는 것입니다.

따라서 VLAs의 기능을 통해,

int sum2d_3(int* ar, int row, int col)
{
    int r, c, tot = 0;
    for(r = 0; r < row; r++)
        for(c = 0; c < col; c++)
            tot += *(ar + c + col * r); // ar[c + col * r]
    return tot;
}

포인터를 이용한 위의 함수처럼, 매개변수 만으로 함수의 기능을 구현하고 배열 메모리에 접근할 수 있습니다.

다만, c언어에서 동적할당이 VLAs의 기능을 대체할 수 있고 컴파일러에 따라 VLAs가 불안정하게 작동할 수 있기 때문에 현재 visual studio에서는 사용이 막혀있습니다.

 

이상의 설명 중 틀린 부분을 지적해주시면 감사하겠습니다.

늘 친절하고 세세한 답변 감사합니다.

좋은 하루 보내세요!

c

답변 1

2

Soobak

안녕하세요, 답변 도우미 Soobak 입니다.

전반적으로 설명해주신 말씀이 맞습니다.
가변 길이 배열(Variable Length Arrays, VLA)를 사용하면 함수의 매개변수 만으로 배열의 크기를 결정할 수 있습니다.

VLAs는 C99 표준에서 소개되었지만, 이후 C11 표준에서는 선택적 기능으로 간주되었으며, 말씀하신대로 Visual Studio 는 VLA 를 지원하지 않는 컴파일러 중 하나입니다.
하지만, 다른 C99 표준을 지원하는 컴파일러들 또한 VLAs 의 사용이 가능하므로, '온라인 c 컴파일러' 에만 VLAs 의 사용을 국한하는 것은 조금 부정확하다고 생각합니다.

나머지 설명들은 적절한 것 같습니다. 👍👍

 

Export template 안됨

1

19

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

54

3

main 함수에서 왜 int만 선언이 되는걸까요

1

56

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

54

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

80

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

113

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

69

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

65

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2