학습목표
1. 기억클래스를 이해할 수 있다.
주요용어
기억 클래스 : 변수를 기억공간의 특정 영역에 할당하는 방법
지역 변수 : 특정 범위 내에서만 사용되는 변수
전역 변수 : 프로그램 전체에 걸쳐 사용될 수 있는 변수
자동 변수 : 함수 실행 시 만들어 지고 실행이 끝나면 기억공간이 제거되는 유형
정적 변수 : 프로그램이 끝날 때까지 기억영역이 유지되는 유형
외부 변수 : 함수외부에 선언되어 프로그램이 끝날 때까지 기억영역이 유지되는 유형
레지스터 변수 : CPU 내의 레지스터에 자료를 저장하고자 할 때 사용되는 유형
5.4 기억 클래스 storage class
변수를 기억공간의 트정 영역에 할당하는 방법
각 변수의 유효범위와 존속기간을 설정
- 변수 사용위치에 따라
* 지역변수
* 전역변수
- 변수의 존속기간에 따라
* 자동변수
* 정적변수
* 외부변수
* 레지스터변수
5.4.1 지역변수와 전역변수
지역변수(local varialble)
- 특정 범위 내에서만 통용되는 변수
- 선언된 블록이나 함수 내에서만 사용 가능
- 함수에서 사용되는 매개 변수도 해당
전역변수(global variable)
- 함수 밖이나 외부파일에서 선언되어 프로그램 전체에 걸쳐 사용될 수 있는 변수
지역변수와 저역변수의 유효범위
>> x, y는 프로그램 전체에서 사용 가능한 전역변수 (함수 외부에서 선언)
>>>>
m,n은 fcn1( ) 함수 내에서만 사용 가능한 지역변수
>>>>
m, n은 fcn2( ) 함수 내에서만 사용 가능한 지역변수
>>>>
m, n은 main( ) 함수 내에서만 사용 가능한 지역변수
전역변수와 지역변수의 비교
- 동일 범위 내에서는 지역변수가 우선
- 전역변수의 선언은 프로그램 선두에 위치
- 가급적 지역변수를 사용하는 것이 효율적
> 함수의 독립석 향상
> 디버깅 효율 향상
> 기억 공간 절약
//지역변수의 사용 예1
#include <stdio.h>
void fcn1();
void main(){
int i = 10;
/* 변수 i는 main() 함수 내부에 선언되어
main() 함수에서만 사용가능한 지역변수 */
printf("\n main i = %d", i);
fcn1();
printf("\n main i = %d", i);}
void fcn1(){
int i;
/*변수 i는 fcn1() 함수 내부에 선언된 지역변수로,
main() 함수의 변수 i와는 별개로 사용됨 */
i = 20;
printf("\n fcn1 i = %d",i); }
//지역변수의 사용 예2
#include <stdio.h>
void main(){ // 블록 A 시작
int x = 2, y = 4;
printf("A : x = %d, y = %d \n", x, y); // 블록 A의 x 와 y
{ // 블록 B 시작
int x;
x = 5;
y++;
printf("B : x = %d, y = %d \n", x, y); //블록 B의 x와 블록 A의 y } // 블록 B 끝
printf("A : x = %d, y = %d \n", x, y); // 블록 A의 x 와 y } // 블록 A 끝
//전역변수의 사용 예1
#include <stdio.h>
void fcn();
int x;
/* 전역변수, 가급적 프로그램 선두에 위치하는 것이 좋고,
초기화하지 않으면 0으로 자동 초기화됨 */
void main(){
printf("1) x = %d \n", x);
fcn1();
printf("2) x = %d \n", x);}
void fcn1(){
//전역변수이므로 어디서나 사용 가능
x++; }
'방송통신대학 > C 프로그래밍' 카테고리의 다른 글
1차원 배열 array (0) | 2020.06.04 |
---|---|
자동, 정적, 외부, 레지스터 변수 variable (0) | 2020.06.03 |
값에 의한 자료전달, 참조에 의한 자료전달 (call by value / call by reference) (0) | 2020.06.01 |
함수의 호출 function (0) | 2020.05.31 |
사용자 정의 함수 (0) | 2020.05.30 |