1. 기억 클래스류
1) 변수가 어떤 형태의 메모리에 할당될지 결정하는 것
2) 문법
[기억클래스류] 자료형 변수명 (=초기값);
3) 기억클래스류를 지정하는 이유
ⓐ 변수를 사용할 수 있는 통용범위를 결정
ⓑ 기억장소의 생성과 소멸시기의 차이를 발생시켜
변수의 유효기간을 달리할 수 있다.
4) 종류
auto, register, static, extern
2. 지역변수
1) 유효기간 : 함수나 블록이 실행할 때 변수가 생성
함수나 블록이 끝나면 변수가 소멸
2) 초기 값을 부여하지 않으면 쓰레기 값을 가진다.
3. 전역변수
1) 함수 밖에 선언되는 변수
2) 범위 : 선언 된 부분의 아래쪽에 위치한 모든 함수
프로그램이 실행될 때 변수가 생성되고,
프로그램이 종료될 때 변수가 소멸된다.
3) 특징 : 전역변수를 변경시키면 그 아래 부분에서는 바뀐 전역변수를 사용한다.
초기 값을 주지 않더라도 0이란 값을 기억한다.
4) 활용 : 함수의 결과값이 두 개 이상일 때 사용
(pointer가 있지만 복잡하므로...)
ex)
#include<stdio.h>
int a;
int b;
void fun()
{
b = a;
printf("2번째 a = %d, b = %d\n",a,b);
}
void main()
{
a = 5;
printf("1번째 a = %d, b = %d\n",a,b);
fun();
printf("3번째 a = %d, b = %d\n",a,b);
}
main에 의해 전역변수 a가 5로 바뀌게 되어 그 밑에 나오는
1,2,3 printf에서는 a의 값에 5가 적용된다.
fun에 의해 전역변수 b가 5로 바뀌어서 그 밑에 나오는
2,3번째 printf에서는 b값에 5가 적용된다.
4. auto. register 기억 클래스류
1) 함수 안이나 블록 안에서 선언하여 사용하는 변수
2) 사용범위 : 함수 안이나 블록 내부
4.1 auto 기억 클래스류 ( 자동 변수)
1) 자동변수는 자주 사용되기 때문에 auto를 생략한다.
> 우리가 지금까지 사용해온 모든 변수는 자동변수이다.
2) 램메모리의 스택영역에 할당된다.
4.2 register 기억 클래스류
1) auto와 동일한 성격을 가진다.
2) CPU내의 레지스터에 기억공간이 할당되어 속도가 빠르다.
5. 정적변수
1) static 기억 클래스류로 선언된 변수
2) 정적지역변수
ⓐ 자동지역 변수와의 공통점 : 해당지역 내에서만 사용가능하고
다른 함수에서는 사용불가.
ⓑ 자동지역 변수와의 차이점 : 변수의 범위가 길다.
> 자동지역변수 : 호출시 생성
함수종료시 소멸
> 정적지역변수 : 프로그램이 실행할 때 생성
프로그램이 종료될 때 소멸
3) 정적전역변수
ⓐ 정적 지역변수가 정적전역변수와 같이 프로그램이 실행될 때 생성되고
프로그램이 끝날 때 소멸 되므로 차이점이 없이 사용된다.
ⓑ 단, 정적전역변수는 모든 함수에서 사용가능하고
정적지역변수는 그 함수에서만 사용 가능하다.
ex) static 기억 클래스류들의 차이점
#include<stdio.h>
static int global_sta = 1; // 정적 전역 변수
void staticfunc()
{
static int local_sta = 1; // 정적 지역 변수
int local = 1; //자동 지역 변수
printf("global_sta = %2d, local_sta = %2d, local =
2d\n",global_sta++,local_sta++,local++);
}
void main()
{
int i; //for
for( i = 1 ; i < 4 ; i++ )
{
printf("----------%d----------\n",i);
staticfunc();
}
}
6. 외부변수
1) extern기억 클래스류
2) 전역변수의 개념을 지니고 있다. 하지만 전역변수보다 큰 의미를 가지고 있다.
※ 프로젝트 개념
> 여러 개의 파일에 소스를 분할하여 작성한 후 하나의 실행파일을 만드는 것.
3) 프로젝트에서와 같이 여러개의 파일로 프로그램을 작성할 때
파일간에 자료를 공유할 때 사용하는 변수