10-17. 변수로 길이를 정할 수 있는 배열
안녕하세요. 제가 설명하는 내용이 맞는지 몰라 질문드립니다.
제 설명의 틀린 부분을 지적해주시면 감사하겠습니다.
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에서는 사용이 막혀있습니다.
이상의 설명 중 틀린 부분을 지적해주시면 감사하겠습니다.
늘 친절하고 세세한 답변 감사합니다.
좋은 하루 보내세요!
답변 1
2
안녕하세요, 답변 도우미 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
76
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
61
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





