array 를 만들 때 크기는 상수로 주어야 한다. 그 이유는 실행 전에 메모리 할당 크기를 알아야 하기 때문이다.

대략, 다음과 같이

int array [10] = {0,};


NOTE: The elements field within brackets [] which represents the number of elements the array is going to hold, must be a constant value, since arrays are blocks of non-dynamic memory whose size must be determined before execution. In order to create arrays with a variable length dynamic memory is needed, which is explained later in these tutorials. [1]


그런데, 요상하게도 gcc 3.4.4 와 4.6.3 에서는 아래 코드가 잘 동작한다.

(비주얼 스튜디오 2010 에서는 바로 9 라인에서 컴파일 에러를 뱉어낸다.)


결과는 대략, (k 에 8을 입력하면)

i : 0x22ac2c

k : 0x22ac28

array : 0x22abd0  // k 와 88 차이 (실제 데이터는 64 바이트)

array2 : 0x22aba0  // array 와 48 차이 (실제 데이터는 32 바이트)

--------------

i : 0x22ac2c

k : 0x22ac28

array : 0x22abe0  // k 와 72 차이 (실제 데이터는 64 바이트)

array2 : 0x22abc0  // array 와 32 차이 (실제 데이터는 32 바이트. 이건 일치!)


원래 예상대로라면 k 주소와 array 주소의 값 차이는 64(4바이트 * 16)가 되어야 하지만,

첫 번째 케이스(func)에서는 88 이고,

두 번째(func2)에서는 72 이다.

각각 24바이트와 8바이트가 비는데, 그곳엔 과연 무엇이 존재하는 걸까 ㅡㅡ;

(시간 나면 더 알아보겠음)



비주얼 스튜디오 2010 에서 func2 만 호출해 본 결과는 아래와 같다.

i : 0018F668

k : 0018F65C

array : 0018F614  // k 와 72 차이 (실제 데이터는 64 바이트)

array2 : 0018F5EC  // k 와 40 차이 (실제 데이터는 32 바이트)





references : 

[1] Arrays, http://www.cplusplus.com/doc/tutorial/arrays/

: