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



-     분류