변수로 길이를 정할 수 있는 배열
Variable-Length Arrays(VLAs).가변크기배열
초기화를 할때, 소스코드에 있는 상수들로 길이를 정하는게 아니라, scanf등으로 변수를 받아서, 런타임동안에 길이를 정할 수 있는 배열을 배워보자.
문법상 한번 길이가 결정되면 다시 바꿀 수 없기 때문에 런타임동안 계속 바꿀 수 있는건 아니고, 한번만 정할 수 있다.
가변길이 배열은 비주얼스튜디오에서는 컴파일이 안된다…. 그래서 온라인 컴파일러를 갖고 해야한다.. 온라인 c컴파일러를 하나 찾읍시다.
int main() {
int n;
printf("Input array length : ");
scanf("%d, &n");
float my_arr[n];
for(int i = 0; i < n; ++i) // input
{
my_arr[i] = (float)i;
}
for(int i = 0; i < n; ++i) // ouput
{
printf("%f\\n", my_arr[i]);
}
return 0;
}
소스코드는 다음과 같다. 주목할 것은 my_arr의 선언에서 배열크기가 변수로 들어가있다는 것.
다음과 같은 결과를 얻을 수 있다.
VLAs는 비주얼스튜디오에서 지원안한다. 현재는 동적할당이라는 대체제가 있기 때문. 컴파일러마다 다소 불안정하게 제공하기도 함.
VLAs는 그냥 C언어의 발전역사에서 이런것도 있었구나 하는 수준으로 알자.
하나 첨언을 하자면, C나 C++코딩을 할때, 하나의 함수는 자기완결적인게 좋다. 다시말하면 함수 바디부분에서, 함수 외부의 변수등을 끌어오는일 없이 함수를 만드는게 깔끔하고 보기 좋다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
복합 리터럴과 배열
Compound literals
우선 Literal은 파일 내에서 문자가 아닌 상수들을 말한다. 이를테면
3;
3.14f;
등