지역변수에 static 선언을 추가하면 전역변수의 성격을 지니는 변수가 된다. static변수의 특성은 다음과 같다. 

1. 선언된 함수 내에서만 접근이 가능하다.(지역변수 특성)

2. 한 번 초기화 되면 프로그램 종료 시까지 메모리 공간에 존재한다.(전역변수 특성)

#include <stdio.h>

void Func(void)
{
    static int num1 = 0;
    int num2 = 0;
    num1++, num2++;
    printf("static %d, local : %d\n", num1, num2);
}

int main(void)
{
    for(int i = 0; i<3; i++)
        Func();
    return 0;
}
/*
output:
static 1, local : 1
static 2, local : 1
static 3, local : 1
*/

static 변수는 전역변수와 동일한 시기에 할당되고 소멸된다. 변수의 접근 범위를 선언된 함수 내에서만 가능하도록 제한해주는 것이다. 

'Language > C, C++' 카테고리의 다른 글

[C] 재귀함수  (0) 2020.12.10
[C] register 변수  (0) 2020.12.10
[C] 전역변수  (0) 2020.12.09
[C] 지역변수  (0) 2020.12.09
[C] 함수(function)  (0) 2020.12.08

전역변수는 어디서든 접근이 가능한 변수로 프로그램이 처음 실행되면 메모리 공간에 할당되어 프로그램이 종료될 때 까지 메모리 공간에 남아있는 변수이다.

 

#include <stdio.h>

void Add(int val);
int num;

int main(void)
{
    printf("num : %d\n", num);
    Add(3);
    printf("num : %d\n", num);
    num++;
    printf("num : %d\n", num);
    return 0;
}

void Add(int val)
{
    num += val;
}

위 코드와 같이 전역변수는 어떠한 중괄호에도 포함되지 않는다.

전역변수는 별도의 값으로 초기화하지 않으면 0으로 초기화되고, 프로그램의 전체 영역 어디서든 접근이 가능하다.

 

만약 전역변수와 동일한 이름의 지역변수가 선언되면 해당 지역 내에서는 전역변수가 아닌 지역변수로 접근한다. 

'Language > C, C++' 카테고리의 다른 글

[C] register 변수  (0) 2020.12.10
[C] static 변수  (0) 2020.12.10
[C] 지역변수  (0) 2020.12.09
[C] 함수(function)  (0) 2020.12.08
[C] goto  (0) 2020.12.08

지역변수는 선언한 함수 내에서만 유효한 변수이다. 다음 코드의 Func 함수의 num 과 main 함수의 num은 다른 변수이다. 

#include <stdio.h>

int Func(void)
{
	int num = 10;
    num++;
    printf("Func num : %d\n", num);
    return 0;
}

int main(void)
{
	int num = 21;
    Func();
    printf("main num : %d\n",num);
    return 0;
}

지역변수는 선언된 지역(선언된 함수)를 벗어나면 자동으로 소멸된다. 위 코드의 Func 함수가 10번 호출된다면 Func의 num 변수도 메모리 공간에 10번 새롭게 할당되고, 소멸된다. 또한 지역변수는 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같아도 문제가 되지 않는다.

 

함수와 마찬가지로 중괄호를 사용하는 반복문이나 조건문에도 지역변수 선언이 가능하다. 

 

지역변수는 또한 외부에 선언된 동일한 이름의 변수를 가려준다. 다음 코드의 경우 if문 내부의 num이 외부의 num변수를 가려 if문 내에서는 if문 내에 선언한 변수의 값이 출력되는 것을 확인할 수 있다.

#include <stdio.h>

int main(void)
{
    int num = 1;

    if(num==1)
    {
        int num = 20;
        num += 5;
        printf("if문 내 지역변수 : %d\n", num);
    }
    printf("main함수 내 지역변수 : %d\n", num);
    return 0;
}

 

함수를 선언할 때 정의하는 매개변수도 지역변수의 일종이기 때문에 선언된 함수 내에서만 접근이 가능하며, 선언된 함수가 반환을 하면 소멸된다.

'Language > C, C++' 카테고리의 다른 글

[C] static 변수  (0) 2020.12.10
[C] 전역변수  (0) 2020.12.09
[C] 함수(function)  (0) 2020.12.08
[C] goto  (0) 2020.12.08
[C] switch  (0) 2020.12.08

+ Recent posts