지역변수에 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

C에서 변수가 의미하는 것은 값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 가리키는 것이다.

그래서 변수를 하나 선언하면 변수의 이름을 통해 값의 저장과 참조가 가능하다.

int main(void){
	int num;	// num이라는 이름의 변수 선언
    num = 20;	// 변수 num에 20저장
    printf("%d", num)	// 변수 num의 값 참조
}

위 코드에서 int는 정수 저장이 가능한 메모리를 할당한다는 의미이고, num은 그 메모리 공간의 이름을 num이라고 하겠다는 것이다. C에서 = 기호는 대입 연산자로 값의 대입을 의미한다. 대입연산자가 사용되면 연산자 오른쪽의 값을 왼쪽의 변수에 대입한다. printf()함수에서는 num에 저장된 값  20이 출력된다. 선언된 변수에 처음 값을 대입하는 것을 초기화 라고 한다. 초기화 후 저장된 값은 변경 가능하다.

 

C에서는 다음과 같이 변수를 선언과 동시에 초기화 하는것, 둘 이상의 변수를 동시에 선언하는 것, 둘 이상의 변수를 동시에 선언 및 초기화 하는 것도 가능하다.

int num1 = 12;	// 선언과 동시에 초기화
int num2, num3;	// 두개의 변수 선언
int num4 = 5, num5 = 20;	// 두개의 변수를 선언 및 초기화

 

#include <stdio.h>

int main(void){
  int num1, num2;
  int num3=30, num4=40;

  printf("num1: %d, num2: %d \n", num1, num2);
  num1 = 10;
  num2 = 20;

  printf("num1: %d, num2: %d \n", num1, num2);
  printf("num3: %d, num4: %d \n", num3, num4);
  return 0;
}
/*
output:
num1: 0, num2: 4200864 
num1: 10, num2: 20 
num3: 30, num4: 40
*/

첫 번째 출력값을 보면 변수를 선언만하고 초기화를 하지 않았을 경우 쓰레기값이 저장될 수 도 있다. 따라서 변수를 선언과 동시에 0으로 초기화 한 후 나중에 필요한 값을 저장하는 방법을 많이 사용하기도 한다.

 

변수 선언 규칙

1. 변수의 이름에는 알파벳, 숫자, 언더바(_)만 사용할 수 있다.(언더바를 제외한 다른 특수문자는 사용할 수 없다.)

2. C는 대소문자를 구분한다. (변수 num 과 변수 NUM은 다른 변수 이다.)

3. 변수의 이름은 숫자로 시작할 수 없다.

4. 키워드는 변수로 사용할 수 없다(키워드 예 : printf, return 등)

5. 변수 이름 사이에는 공백이 사용될 수 없다.

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

[C] scanf()  (0) 2020.11.21
[C] 연산자  (0) 2020.11.19
[C] printf()  (0) 2020.11.18
[C] 주석  (0) 2020.11.17
[C]Hello World.c  (0) 2020.11.17

+ Recent posts