Notice
Recent Posts
Recent Comments
Today
Total
05-17 07:18
Archives
관리 메뉴

Jeongchul Kim

C언어 변수 Variable 본문

Computer Language

C언어 변수 Variable

김 정출 2016. 2. 18. 10:34


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;

}



메모리 영역












Comments