C언어는 함수 내에 선언한 숫자 변수를 초기화하지 않습니다.

배열 변수도 마찬가지여서 아래와 같이 코드를 실행하면 일명 쓰레기 값이 출력됩니다.


int main( void){

   int      ary_num[5];

   int      ndx;


   for ( ndx = 0; ndx < 5; ndx++){

        printf( "%d=%d\n", ndx, ary_num[ndx]);

   }

   return 0;

}


]$ a.out

0=-1219121579

1=-1217441152

2=0

3=134513801

4=-1217601548

]$ 


안전한 실행을 위해 초기화를 하겠습니다. 모두 0으로 초기하려는데 첫 번째 배열값은 1로 설정하고 싶습니다.

그러면 어떻게 하면 될까요? 배열은 {} 문자로 초기화할 수 있습니다. 첫 번째 배열값은 1로, 나머지는 0으로 초기화할 때는

아래와 같이 지정하고픈 숫자 이후는 쉼표로 나머지를 0으로 초기화하게 합니다. 


int main( void){

   int      ary_num[5] = {1,};

   int      ndx;


   for ( ndx = 0; ndx < 5; ndx++){

        printf( "%d=%d\n", ndx, ary_num[ndx]);

   }

   return 0;

}


]$ a.out

0=1

1=0

2=0

3=0

4=0

]$ 


그러나 최근 컴파일러는 쉼표를 사용하지 않아도 배열 요소 크기만큼 입력하면

그 이후의 것은 자동으로 0으로 초기화합니다.

즉,

int      ary_num[5] = {1,};


이렇게 쉼표를 주나


int      ary_num[5] = {1};


쉼표를 사용하지 않아도 상수를 지정하지 않은 요소는 모두 0으로 초기화합니다.

그래도 쉼표를 표시해 주는 것이 좋겠습니다.