카메라 개발자 공부방(SW)

[7장] 변수의 초기화와 대입 본문

Langauge/C

[7장] 변수의 초기화와 대입

luckmart 2021. 9. 26. 15:06
반응형

자 오늘은 변수의 초기화와 대입에 대해서 공부를 해보겠습니다.

초기화와 대입에는 큰 차이가 있는데요.

초기화는 메모리 공간이 만들어진 시점에 단 한번 값을 저장을 합니다.
대입은 메모리 공간이 만들어진 시점 이후에 메모리의 값을 변경시키는 연산입니다.

초기화는 단 한 번만 발생되고,

대입은 무한히 발생할 수 있습니다.

그런데 초기화를 하지 않으면, 메모리 안에는 어떤 값이 들어있을까요?

바로 쓰레기 값이 들어있답니다.

#include <stdio.h>

int main()
{
    int val;
    printf("val: %d\n", val);
    return 0;
} 

// 실행결과
// 쓰레기값 출력

 

이 쓰레기 값은 runtime에 runtime error를 발생시킬 수 있습니다.

컴파일 에러는 작성한 코드가 컴파일 과정에 문제가 안생기는지를 체크할 뿐, 실행시간에 제대로 동작하는지 보장하지 못한답니다.

 

다음의 코드는 runtime exception이 발생하는 예제 입니다.

#include <stdio.h>

int main()
{
    int val;
    printf("%d", val + 5);
    return 0;
}

// 실행결과
// run time exception occur!
// program down

컴퓨터 입장에선 쓰레기 값에 어떤 산술 연산을 하는 것이 약속되어있지가 않습니다. 그렇기 때문에 실행 중 프로그램이 죽어버리는 예외가 발생합니다.

 

비슷한 경우에 다음의 상황에서도 runtime exception이 발생합니다.

#include <stdio.h>

int main()
{
    float val = 5 / 0;
    return 0;
}

// 실행결과
// run time exception occur!
// program down

실생활에서도 0을 나누는 경우는 부정으로 취급하죠?

그렇기 때문에 당연히 컴퓨터에서도 이런 연산이 약속되어있지 않아 run time error가 발생을 한답니다.

 

이러한 연산 실수는 대학교 수업, 개인 공부하다가 발생되는 경우엔 상관없지만

실무에서 이런 문제가 나오면 아주... 큰일이 납니다....

변수를 사용할 땐 반드시 초기화를 하고 사용해야 합니다.

 

나중에 배우겠지만

메모리 생성 주기, 어느 메모리 영역에 할당되었는지 여부에 따라 자동으로 초기화가 되는 경우도 있습니다.

그 챕터를 배우기 시작할 때 다시 이야기해보겠습니다.

 

다음은 변수의 초기화와 대입 예시입니다.

#include <stdio.h>

int main()
{
    int val = 0;
    return 0;
}

val이라는 메모리 공간을 할당하는 시점에 0이라는 값으로 단 한 번만 초기화를 진행되었습니다.

#include <stdio.h>

int main()
{
    int val0 = 0, val1 = 2;
    return 0;
}

변수가 여러 개일 땐 쉼표를 이용해 초기화가 가능합니다.

#include <stdio.h>

int main()
{
    int val;
    val = 10;
    val = 20;
    val = 30;
    return 0;
}

 

대입 연산은 메모리 공간이 할당된 이후에 무한히 할 수 있는 점 기억해주세요!

 

 

자 오늘은 여기까지입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Langauge > C' 카테고리의 다른 글

[9장] 변수와 주소  (0) 2021.09.28
[8장] 사용자 함수  (0) 2021.09.27
[6장] 자료형(data type)  (0) 2021.09.25
[5장] 반복문  (0) 2021.09.24
[4장] 조건 제어문  (0) 2021.09.23
Comments