웹사이트 검색

Linux C 프로그래밍 자습서 17부: 변수 초기화


변수 초기화는 지금까지 이 진행 중인 C 프로그래밍 자습서 시리즈 전체에서 수행해 온 작업이지만 명시적으로 논의한 적은 없습니다. 음, 이제 그 변경 사항은 여기에서 변수 초기화에 대해 좀 더 자세히 논의하고 있습니다.

그렇다면 초기화란 정확히 무엇입니까? 이름에서 알 수 있듯이 값이 처음으로 변수에 할당되는 것을 변수 초기화라고 합니다. 예를 들어:

int a = 1;

이것은 명시적 초기화라고도 합니다. 이유는 a와 같은 변수에 값을 할당하지 않고 변수 값을 인쇄하려고 해도 임의의 값이 표시되기 때문입니다.

예를 들어 다음 코드를 고려하십시오.

#include <stdio.h>

int main()
{
int a;
printf("a = %d", a);

return 0;
}

이 코드를 실행했을 때 나는 a를 0으로 얻었습니다. 그러나 a와 같은 자동 변수는 명시적인 초기화가 없을 때 임의의 값으로 초기화되기 때문에 이것이 항상 참인 것은 아닙니다. 그렇기 때문에 가비지 값이 실수로 사용되는 것을 방지하기 위해 항상 값을 명시적으로 초기화할 것을 제안합니다. 예를 들어 0입니다.

초기화되지 않은 상태로 두면 가비지 값을 얻는 유일한 자동 변수입니다. 정적 및 전역 변수는 값을 명시적으로 지정하지 않아도 초기값으로 0을 가져옵니다. 예를 들면 다음과 같습니다.

int x;

void func();
{
static int b;

//statements

b++;
}

int main()
{
int a;

//statements

func();
return 0;

위의 코드에서 변수 x와 b가 0으로 초기화되는 것을 보장하지만 변수 a가 어떤 값을 포함할지에 대한 보장은 없습니다.

계속해서 상수 값으로 정적 및 전역 변수만 초기화할 수 있습니다. 즉, 다른 변수와 관련하여 정적 및 전역 변수에 값을 할당할 수 없습니다.

예를 들면 다음과 같습니다.

#include <stdio.h>

int k;
int x = k;

void func()
{
int z = 2;

static int b = z;
b++;
}

int main()
{
int a;
printf("a = %d", a);

func();
return 0;
}

이 코드를 컴파일할 때 다음 오류가 발생했습니다.

main.c:12:9: error: initializer element is not constant
 int x = k;
         ^
main.c: In function ‘func’:
main.c:18:20: error: initializer element is not constant
     static int b = z;
                    ^

x는 전역이고 b는 정적이므로 컴파일러에서 초기화 요소가 상수가 아니라고 분명히 말하는 것을 볼 수 있습니다. 따라서 이것은 전역 및 정적 변수를 초기화하는 데 상수만 사용할 수 있다는 사실을 재확인합니다.

계속해서 배열을 다른 방법으로 초기화할 수도 있습니다. 예를 들어 초기화하는 한 가지 방법은 다음과 같습니다.

int arr[] = {1,2,3,4,5};

이런 식으로 초기화 요소의 수를 세어 배열의 크기를 계산합니다. 따라서 이 예에서 배열 arr의 크기는 5이고 값은 1-5를 요소로 포함합니다(순서대로).

다음으로 배열의 크기가 미리 정의되어 있고 위의 방법을 사용하여 배열을 초기화한다고 가정해 보겠습니다. 예를 들면 다음과 같습니다.

int arr[5] = {1,2,3,4};

그런 다음 이 경우 처음 네 개의 요소는 {} 내에 제공된 목록에서 선택되고 마지막 요소는 0이 됩니다. 예, 이 방식으로 배열 크기보다 적은 수의 요소를 제공할 수 있습니다. 컴파일러는 나머지를 0으로 초기화하여 처리합니다.

예를 들어, 다음 프로그램:

#include <stdio.h>

int main()
{
int arr[10] = {1,2,3,4,5};
int i = 0;

for(i=0;i<10;i++)
printf("%d ", arr[i]);

return 0;
}

다음 출력을 생성합니다.

1 2 3 4 5 0 0 0 0 0

이 자습서에서는 변수 초기화에 대해 조금 논의했습니다. 여기에서 논의된 개념과 예제를 시도해 보시기 바랍니다. 의심이나 질문이 있는 경우 아래에 의견을 남겨주세요.