컴퓨터 언어/C

[C] C언어 8일차 기타 문법2 (지역, 전역, 정적 변수 사용 범위)

훈츠 2020. 3. 17. 21:13
반응형

안녕하세요. 훈츠 입니다. 지역 변수, 전역 변수, 정적 변수에 대해서 정리해 보도록 하겠습니다.

변수의 사용 범위 

구분 선언  범위 구분(사용 가능) 생성 시기 소멸 시기
지역 변수 함수 안 함수 안 함수 호출 함수 종료
전역 변수 함수 밖 프로젝트 전체 Prog. 실행 Prog. 종료
정적 변수 함수 안,밖  선언된 함수안 or 해당 file 함수 or Prog Prog. 종료

지역 변수 (local variable)

  • 함수 안에서 선언 하고, 함수 안에서만 사용 가능 합니다. 
  • 함수 호출시 생성되고, 함수 종료시 소멸됩니다.
  • 초기값 : 이전 메모리에 남아 있던 임의의 값으로 초기화 

전역 변수 (globla variable)

  • 함수 밖에 선언 후, 프로젝트 전체에서 사용 가능 합니다.
  • 프로그램 실행시 생성되고, 프로그램 종료시 소멸됩니다.
  • main() 함수 이외에서 사용시에는 extern 키워드 사용합니다. 
  • 초기화 : 0

정적 변수 (static variable)

  • 함수 안, 밖에서 두곳 모두 선언 가능하고, 선언된 함수안 혹은 file 안에서만 사용 가능 합니다. \
  • 프로그램 실행시 생성되고, 프로그램 종료시 소멸됩니다. 
  • 초기화 : 0

로컬 변수와 전역변수 예시

int gVar =30; //전역 변수 

void Lvar(int var) {
	int _var = 20; //함수내 로컬 변수
	printf("펑션 매개변수값 \t: %d, 주소 : %p\n", var, &var);
	printf("펑션 로컬변수값 \t: %d, 주소 : %p\n", _var, &_var);

}
void Gvar() {
	printf("펑션외 글로벌변수값 \t: %d, 주소 : %p\n", gVar, &gVar); //함수에서 전역변수 접근
}

int main() {

	int var = 10; //main 함수내 로컬변수
	printf("메인 로켤변수값 \t: %d, 주소 : %p\n", var, &var); //로컬 변수
	Lvar(var);
	printf("글로벌 변수값 \t\t: %d, 주소 : %p\n", gVar, &gVar);//전역 변수 
	Gvar(); //함수 호출

	_getch();
	return 0;
}

메인 로켤 변수값과 펑션 매개변수값은 같지만 주소가 다른점을 확인해 보세요. 
펑션 로켤 변수의 주소 역시 다릅니다. 
글로벌 변수의 주소와 펑션에서 호출한 글로벌 변수의 주소가 같은점을 보시면 전역 변수와 로컬 변수의 차이를 이해하실수있을겁니다. 

정적 변수 예시

void Gadd() {
	
	static int var; //static 이나 globla 변수는 초기화 시킬필요가 없습니다. 
	var++;
	printf("펑션 정적변수값 : %d, 주소 : %p\n", var, &var);

}

int main() {

	Gadd();
	Gadd();
	Gadd();
	
	_getch();
	return 0;
}

로컬 변수, 전역 변수, 정적 변수의 특징을 잘 파악하고 프로그램에 적용해 보세요.

반응형