C, C++
static과 전역변수, 지역변수
SuuuuuuuL
2018. 12. 27. 16:35
지역변수는 {}를 벗어나서는 사라짐 static은 {} 밖에서 호출하여 사용할 수는 없지만 그대로 존재함!
#include <stdio.h>
int reset();
int next(int);
int last(int);
int now(int);
int i = 1;
int main(){
auto int i, j; // 지역변수 i가 전역변수 i보다 우선됨
i = reset();
for(j = 0; j < 3; j++){
printf("i = %d\t j= %d\n", i, j);
printf("next(i) = %d\n", next(i)); // 여기서 전역변수가 1, 2, 3으로 증가됨
printf("last(i+j) = %d\n", last(i)); // static int 가 10,9, 8
printf("now(i+j) = %d\n", now(i+j)); // 10+1, 10+2, 10+3 값이 나옴
printf("/n");
}
}
int reset(){
return i;
}
int next(int j){ // 전역변수를 보냈지만 사용되지는 않고.. 그냥 아래 i++이 작용되어 전역변수 값이 수정됨
j = i++; // 연산자 우선순위는 ++이 먼저니까 i값 증가 먼저
return j;
}
int last(int j){
static int i = 10;
return j = i--;
}
int now(int i){ //지역변수는 외부변수보다 우선함
auto int j = 10;
return i = j += i; // j+i를 먼저 하고
}
기억클래스 (storage class)
- 기억부류라고도 함
- 변수를 선언한 경우, 변수의 유효범위(scope) 변수의 생존기간(life time) , 변수의 메모리 위치, 변수의 초기화 여부 등 변수의 성격
을 결정하는 C 프로그램의 요소
- C프로그램의 메모리 간략 구조
1. Code +RO 데이터
2. 초기화 데이터
3. 초기화되지 않은 데이터( 비초기화 데이터)
4. Heap
5. Stack
- 분류