본문 바로가기
프로그래밍 언어/C 언어

[C] 지역변수와 전역변수

by 까망 하르방 2021. 3. 19.
반응형

변수는 선언되는 위치에 따라서 크게 『전역변수』 와 『지역변수』 로 나뉜다.

두 변수의 차이점은 메모리상에 존재하는 기간, 변수에 접근할 수 있는 범위

 

지역 변수

중괄호{} 내에 선언되는 변수는 모두 지역변수다.

즉, 선언된 지역 내에서만 유효

 

[예제 코드]

지역변수는 선언된 지역 내에서만 유효하기 때문에 

선언된 지역이 다르면 이름이 같아도 문제가 되지 않는다.

#include <stdio.h>

int SimpleFunc(void) {
       int num = 10;
        num++;
        printf("num = %d\n", num);
        return 0;
}

void main() {
        int num = 5;
        SimpleFunc();
        printf("num = %d\n", num);
}

 

 

함수{ } 내부에 선언된 변수를 초기화 하지 않고 접근시 C4700 Error 발생

#include <stdio.h>
int main(void) {
        int value;
        printf("%d\n", value);
        system("pause");
        return 0;
}

 

기본형 매개변수도 지역변수의 일종이다.

- 선언된 함수 내에서만 접근이 가능

- 선언된 함수가 반환을 하면, 지역변수와 마찬가지로 소멸

#include <stdio.h>
int SimpleFunc(int val) {
        
        val++;
        printf("val = %d\n", val);
        
        return 0;
}
void main() {

        int num = 5;
        SimpleFunc(num);

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

매개변수 형태를 위의 결과를 전역변수, 포인터 등을 이용해서 결과를 다르게 할 수 있다.

 

전역 변수

- 전역 변수의 경우에는 선언만 해주어도 기본값이 들어갑니다

- 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재.

- 프로그램 전체 영역 어디서든 접근이 가능하다.

- 만약 전역변수와 지역변수의 이름이 같다면 지역변수를 우선시 한다.

- 전역변수를 남용해서는 안됩니다.

    기존 전역변수 값을 변경하면 참조하고 있는 다른 함수의 코드내용도 변경될 수 있기에 구조가 복잡해질 수 있음

#include <stdio.h>

int value;
int main(void) {       
        printf("%d\n", value);
        system("pause");
        return 0;
}

 

C언어 변수 형태와 입출력

- int (%d) ← 4 byte

- long long (&lld) ← 8 byte

- double (입력 시 %lf, 출력 시 %f) ← 8 byte

입력 받을 때는 특정 주소에 특정 크기만큼 입력해야 하므로 %lf

출력할 때는 주소가 아닌 값 자체를 이용하므로 상세 크기 입력 불필요 %f

- float (%f) ← 4 byte

- string  (%s) ← 제한 없음

- char (%c) ← 1 byte

- bool 

 

 

반응형

'프로그래밍 언어 > C 언어' 카테고리의 다른 글

[C] 함수의 선언  (0) 2021.03.19
[C] 문자열 관련 함수  (0) 2021.03.19
[C] static 변수  (0) 2021.03.19
[C] 구조체 (structure)  (0) 2021.03.19
[C] 조건문 (Switch문 예제)  (0) 2021.03.19

댓글