a[]처럼 배열의 개수를 적지 않은 배열 선언 방법은 조금 낯설지 않나요?
int a[] = { 1, 2, 3, 4, 5, 6 };
언뜻 생각하면 이 코드는 에러가 날 것 같습니다. 왜냐하면 배열을 선언하면서 몇 개의 메모리 방을 할당받을지 명시하지 않았기 때문입니다. 그렇지만 결론부터 얘기하면 아무런 문제없이 잘 수행됩니다.
분명 배열을 선언할 때는 [] 안에 몇 개의 정보를 저장할지 컴퓨터에게 미리 알려주고, 저장할 정보의 개수에 따른 메모리 방을 할당해야 한다고 배웠는데, 뭔가 이상하네요!
이 코드처럼 배열 a[]를 선언하고 동시에 초깃값을 지정할 경우 컴퓨터는 초깃값의 개수를 보고 필요한 메모리 방 크기만큼 메모리를 알아서 할당받습니다. 즉, { 1, 2, 3, 4, 5, 6 }을 보고 6개의 정수가 저장되겠다는 것을 확인한 후 배열의 크기를 6으로 정합니다. a[]라고 선언하였지만 a[6]과 마찬가지로 수행되는 것이지요.