-
static과 전역변수, 지역변수C, C++ 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, 8printf("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
- 분류
'C, C++' 카테고리의 다른 글
헤더와 메소드 분리하기, 메소드 포인터 이용하기 (0) 2018.12.27 void 포인터 (0) 2018.12.21 함수의 포인터 표현 + 포인터와 배열의 차이점 (0) 2018.12.20 포인터 연산과 배열 표현(심화 연습편) (0) 2018.12.19 String 함수의 사용, 선택정렬- 버블정렬 (0) 2018.12.18