C언어 변수 Variable
지역변수 local variable = 자동변수 auto variable
지역 변수 local variable는 자동변수 라고도 불린다.
생존 기간은 함수가 호출되어 함수가 실행되는 동안이다.
함수 function은 하나의 독립된 프로그램이다.
지역 변수의 메모리에서의 위치는 스택 stack 영역
지역 변수는 데이터형 앞에 auto가 생략되어져 있다.
void function() {
auto int val = 1;
printf(“%d”,val);
}
int main(void) {
{
// 새로운 블록으로 영역을 생성
int temp = 100;
puts(temp);
}
function();
return EXIT_SUCCESS;
}
전역 변수 global
프로그램 시작과 동시에 메모리 BSS에 할당되어 종료할 때까지 존재한다.
초기화는 자동으로 0으로 디폴트 값으로 되어있다.
사용 범위는 함수 내부, 외부, 메인 어느 곳에서든 변수를 사용 가능하다.
#include <stdio.h>
#include <stdlib.h>
int global = 1;
void increment() {
printf("before Function increment : %d\n",global);
global++;
printf("after Function increment : %d\n",global);
}
int main(void) {
int i=0;
for(;i<5;i++) {
printf("before main : %d\n",global);
global++;
printf("after main : %d\n",global);
}
i = 0;
do{
increment();
i++;
}while(i<5);
return EXIT_SUCCESS;
}
정적 변수 static variable
함수 내부에 선언된 자동변수=지역변수는 함수가 실행될 때 메모리에 할당되고 리턴될 때 회수됩니다.
정적 변수는 메모리의 생성과 초기화가 함수 호출에 영향을 받지 않는 변수다.
키워드는 static을 사용. 지역이나 전역 변수에서 사용 가능.
초기화는 단 한번 만 !
사용 범위는 지역 변수와 같다.
생존 기간은 함수 호출과 상관없이 프로그램이 시작하여 종료될 때까지 사용.
#include <stdio.h>
#include <stdlib.h>
void increment() {
static int num = 0;
num++;
printf("num : %d\n",num);
}
int main(void) {
int i=0;
do{
increment();
i++;
}while(i<5);
return EXIT_SUCCESS;
}
외부 변수 extern variable
하나의 파일에 속해 있지 않으므로 여러개 분할된 파일에서 자유롭게 사용.
편리하게 공유 가능하며, 사용 범위가 자유롭다.
키워드 extern
main.c
#include <stdio.h>
#include <stdlib.h>
void exchange();
int a,b; // global 변수
int global = 1;
int main(void) {
extern int global; // 위에서 쓰이는 전역 변수라고 extern 키워드로 선언
printf("global : %d\n",global);
printf("두 개의 정수 입력 : ");
scanf("%d%d",&a,&b);
printf("before a : %d b : %d\n",a,b);
exchange();
printf("after a : %d b : %d\n",a,b);
return EXIT_SUCCESS;
}
extern_variable.c
#include <stdlib.h>
extern int a,b;
void exchange() {
int temp;
temp = a;
a = b;
b = temp;
}
메모리 영역
'Computer Language' 카테고리의 다른 글
Eclipse Web 툴 및 webserver 설치하기 (0) | 2016.02.22 |
---|---|
Eclipse에서 Node.js와 JavaScript 실행하기 (0) | 2016.02.22 |
C 언어에서 struct로 Java의 Class 묘사 (0) | 2016.02.04 |
Eclipse에서 JAVA 환경 설치 및 프로젝트 생성과 소스파일 컴파일 및 실행 (0) | 2016.02.04 |
Eclipse에서 C 환경 설치 및 프로젝트 생성과 소스파일 컴파일 및 실행 (1) | 2016.02.04 |