본문 바로가기
Develop/C

12 C언어 변수의 접근 범위!

by 구운밤이다 2016. 7. 3.
728x90
반응형

2016/07/02 - [컴퓨터/C언어] - 11 C언어 재귀 함수


지역 변수


오늘은 변수의 접근 범위에 대해 배워보도록 할께요! 우리가 지금까지 배워온 변수는 지역변수라는 아이에요~ 저번 함수 공부 시간에 공부했던 예제를 이용해서 보도록 할께요.


#include <stdio.h>


int Add(int n1, int n2);

void ShowResult(int n);

int Scan(void);

void StartPage(void);


int main(void) {

    int n1, n2, sum;

    StartPage();

    n1 = Scan();

    n2 = Scan();

    sum = Add(n1, n2);

    ShowResult(sum);

}


int Add(int n1, int n2) {

    int sum = n1 + n2;

    return sum;

}


void ShowResult(int n) {

    printf("sum : %d", n);

}


int Scan(void) {

    int n;

    scanf("%d", &n);

    return n;

}


void StartPage(void) {

    printf("10 C언어의 함수\n");

    printf("함수의 종류를 배우고 있습니다\n");

    printf(" 개의 정수를 입력 : ");

}




먼저 Scan 함수를 보도록 할게요.


int Scan(void) {

    int n;

    scanf("%d", &n);

    return n;

}


n이란 변수가 선언되어 있죠 이렇게 함수 안에 선언된 변수를 지역변수라고 부릅니다 이 중괄호를 벗어나면 자동으로 변수들이 소멸됩니다!! 그러면 이번엔 main 함수를 보도록 하죠!


int main(void) {

    int n1, n2, sum;

    StartPage();

    n1 = Scan();

    n2 = Scan();

    sum = Add(n1, n2);

    ShowResult(sum);

}


이 함수 안에 변수 n1, n2, sum이 함수의 중괄호 안에 있죠 이것도 또한 지역변수이고, 저렇게 Scan함수를 호출할 때마다 아까 보았던 변수 n이 새로 선언되고 소멸됩니다

그리고 for(int i = 0; i < num; i++) 의 i도 for문 안에서만 작동하는 지역변수이고, while 과 if 같은 반복문, 조건문에서도 지역변수를 선언할 수 있습니다


int main(){

    int n = 9;

    {

        int n= 4;

        n++;

        printf("%d\n", n);

    }

    printf("%d\n", n);

}




그리고 이렇게 중괄호 안에서 사용하는 것도 가능하죠

또한 밖의 지역변수와 이름이 같다 하더라도 중괄호 내에서는 중괄호 밖에서 선언된 변수가 가려집니다!


전역변수


이번엔 전역변수라는 변수를 배워보도록 하겠습니다!! 전역변수는 함수와 같이 중괄호 내에 선언되지 않고 기본적으로 0으로 초기화됩니다 그리고 위와 같이 전역변수와 이름이 같은 지역변수를 만나면 전역변수가 가려지게 되요!! 하지만 전역변수를 많이 사용하면 여러 함수에서 접근할 때 너무 복잡해지기 때문에 좋지 않습니다 이럴 때엔 지역변수 앞에 static을 붙이는 방법을 사용하면 훨씬 더 간결하고 좋은 프로그래밍을 할 수 있습니다!


static 변수


그럼 static 변수가 무엇인지 알아보도록 할께요!!


int main(){

    int n = 9;

    

    for (int i = 0; i < n; i++) {

        static int num= 10;

        num += n;

        printf("%d\n", num);

    }

}


자 이 코드를 실행하면 어떻게 될까요?



이렇게 됩니다! 이것이 static 변수의 특성이죠!!

static 변수는 딱 1회만 초기화 되고(전역변수) 선언된 함수 내애서만 접근(지역변수)이 가능해요!! 그리고 static 변수 대신 register라는 변수를 사용하는 경우도 있는데요 이 register는 접근이 가장 빠른 레지스터라는 메모리에 변수를 할당해주어 프로그램의 성능을 높이는데 사용되요! 자주 사용하는 변수에 사용하면 좋겠죠?


모르는 것은 댓글이나 쪽지로 남겨주시면 성심 성의껏 답변해드리겠습니다!! 댓글공감구독(이웃추가)는 블로거에게 큰 힘이 됩니다! 부탁드리면서 이번 포스팅을 마치도록 하겠습니다! 지금까지 딘또였습니다

728x90
반응형

'Develop > C' 카테고리의 다른 글

13-2 C 언어의 배열!  (0) 2016.07.05
13-1 C 언어의 배열!  (0) 2016.07.05
11 C언어 재귀 함수  (0) 2016.07.02
10 C언어 함수  (6) 2016.06.30
9 C언어의 반복문 조절 continue, break, goto  (0) 2016.06.29

댓글