본문 바로가기

C언어 다시 다지기

DAY004 변수의 초기화

                                          난이도 : ☆☆☆

■ 변수의 초기화


변수는 전역 변수와 지역 변수로 구분되며, 전역 변수를 초기화하지 않으면 자동으로 0으로 초기화됩니다. 하지만 지역 변수를 초기화하지 않으면 항상 임의의 값으로 초기화됩니다. 처음 프로그래밍을 하다보면 지역 변수를 초기화하지 않아서 발생하는 문제가 종종 있습니다. 변수를 초기화하는 방법은 두 가지가 있으며, 다음은 선언과 동시에 초기화하는 방법입니다.


1
int total = 0 ;        /* total을 선언하고 0으로 초기화 */


만약 total을 선언하 후 0으로 초기화하지 않는다면, total은 쓰게기 값이 존재하게 됩니다. 다음과 같이 total을 초기화하지 않고 바로 사용하면 total은 쓰레기 값을 갖고 있기 때문에 원하지 않는 결과가 나옵니다.

)

1
2
int total ;     /* total은 쓰레기 값(보통 -858993460)을 갖습니다. */
total = total + 1000;


total은 선언과 동시에 초기화되지 않았기 때문에, total에 1000을 더해도 그 값은 어떤 값이 될지 예측 할 수 없습니다. 그러므로 total을 0과 같은 적당한 값으로 초기화해 줄 필요가 있으며, 이것이 변수를 초기화하는 두 번째 방법입니다.


1
2
3
int total ;            /* total은 쓰레기 값을 갖습니다. */
total = 0;             /* total은 0으로 초기화합니다. */
total = total + 1000   /* total에는 1000이 대입됩니다. */


참고로 '='는 대입 연산자이며, 대입 연산자 우측의 값을 대입 연산자 좌측에 넣어 주는 역할을 합니다. 위의 마지막 줄에 보면 total + 1000이 우측에 있는데, 이 수식을 먼저 계산해서 대입 연산자의 좌측에 있는 total 변수에 넣습니다. 우측에서 계산 시 total은 값이 0이기 때문에 수식은 '0 + 1000'과 같으며, 이 값을 좌측의 total에 넣는 것입니다. 그러면 'total = 1000' 과 같기 때문에 결국 total에는 1000이 대입됩니다.


변수는 또한 동시에 여러 개의 선언될 수 있으며, 이에 따라 선언과 동시에 초기화를 할 수 있습니다. 다음 예를 보면,


1
2
3
int total = 0;
int kor = 100, eng = 100, math = 100;/* 콤마(,)를 구분기호로 사용*/
int i = 0, j, k;      /* 선언과 동시에 초기화 또는 초기화하지 않음 */


변수를 연속해서 선언할 경우는 콤마(,)를 구분 기호로 사용하며, 각 변수를 대입 연산자를 사용하여 초기화해주면 됩니다. 그리고 세 번째 줄과 같이 선언과 동시에 초기화 할 수도 있고, 필요에 따라서 초기화하지 않을 수도 있습니다.


한 줄에 변수를 여러 개 선언할 때는 특별히 주의해야 할 것도 있습니다. 만약 다음과 같이 너무 많은 변수를 한 줄에 선언하면 소스 코드를 분석하는 것이 어려워질 수도 있습니다.


1
int i, j, k, kor, eng, math /* 한줄에 용도가 틀린 여러 변수를 선언 */


변수 선언을 잘 하는 것도 프로그래밍 기술 중의 하나입니다. 여러분이 고급 프로그래머로 성장하기 위해서는 동작만 되는 프로그램을 만드는 것보다는, 의미를 쉽게 알 수 있는 변수를 선언하여 다른 사람이 좀 더 이해하기 쉽도록 해야 합니다.


변수를 선언하고 사용할 때는 주의해야 할 것이 또 하나 있습니다. 변수는 데이터형에 따라 저장 가능한 값의 범위가 존재합니다. 그러므로 다음과 같이 사용하면 잘못된 결과를 초래합니다.


1
2
char total = 0;
total = total + 1000;


위에서 total은 char형 변수이기 때문에 최대로 저장할 수 있는 값이 127밖에 안 됩니다. 127을 초과하는 값을 저장하기 위해서는 short, int, long 등의 데이터형을 사용해야 합니다.

'C언어 다시 다지기' 카테고리의 다른 글

DAY003 변수의 선언  (0) 2018.04.30
DAY002 숫자를 저장하는 변수  (0) 2018.04.26
DAY001 변수란?  (0) 2018.04.17
C의 기본적 지식(2)  (0) 2018.03.14
C의 기본적 지식(1)  (0) 2018.03.11