개발자 데뷔!

[C/C++ 1.4] static 변수 본문

프로그래밍 언어/C

[C/C++ 1.4] static 변수

물꼮이 2022. 3. 10. 09:52

*지역변수(local)

 - 선언된 함수 내에서만 접근 가능 

 - 해당 함수 return 하면 소멸 

 

* 전역변수(global)

 - 후략???????

 

 

지역변수의 static 선언)

 - 선언된 함수 내에서만 접근 가능 (local)

 - 항상 메모리공간에 존재 - 해당 함수 return 되도 소멸하지 않음 (global)

 

 - 초기화하지 않으면 0으로 초기화됨 (global)

 - 프로그램 시작과 동시에 할당&초기화_초기화는 오직 1회만됨 (global)

   [함수 호출 시 선언되는 것이 아님!!** 특정 함수 안에 쓰여있더라도(밑의예시처럼)

    이는 그저 접근범위를 제한하기 위함]

 - 프로그램 종료될 때까지 메모리 공간에 고정 (global)

 

ex) 

#include <stdio.h>

void func(void){
	static int num1 = 0; 	//if 초기화하지 않으면 값 0 (전역변수 특징) ***
	int num2 = 0;		//if 초기화하지 않으면 쓰레기값 (지역변수 특징)
	num1++, num2++;
	printf("static: %d, local: %d\n", num1, num2);
}

/*for test*/
int main(void) {
	int i;
	for (i = 0; i < 5; i++)
		func();
	return 0;
}

결과화면)

static-test 결과화면

같은 function이 반복되어도,

local변수는 매 회 함수가 반환하며 초기화되어 매번 1을 출력하지만,

static은 값이 메모리공간에 고정 되어 매 회 1이 더해진다. 

 

즉, 위 func함수에서

static int num1=0; 

부분은 존재하지 않는 것 처럼 간주하면 된다. 

 

* 전역변수 대신 사용하면 안정성↑

* 단, 변수에 접근하는 영역이 단 하나의 함수 일 때만 가능 

'프로그래밍 언어 > C' 카테고리의 다른 글

[C/C++ 1.8] 연산자 sizeof  (0) 2022.03.10
[C/C++ 1.5] Register 변수  (0) 2022.03.10
[C/C++ 1.3] 변수선언&초기화  (0) 2022.03.10
[C/C++ 0.1] C 컴파일방법 & 표준입출력  (0) 2021.07.15
[C/C++ 0.0] C의 시작  (0) 2021.07.11