C

변수의 종류와 유효범위

김꼬알 2023. 3. 8. 17:55

변수

데이터를 저장할 수 있는 메모리의 기억공간

 

변수 생성 규칙 및 특징

  • 예약어(키워드)는 사용할 수 없다
  • 공백을 포함할 수 없다
  • 첫 글자는 영문과 언더바(_)만 사용이 가능하다
  • 언더바(_) 이외의 특수문자는 사용할 수 없다
  • 대소문자를 구분한다

예제) 다음 중 변수로 사용 가능한 것은?

▶ 1, 3, 4, 6, 7 사용 가능

 

데이터 타입(자료형)

 

변수 선언

int 변수명;

int 변수명 = 초기값;

 

 

지역변수

  • 함수/블록 안에서 선언하는 변수
  • 함수/블록의 종료와 함께 메모리상에서 소멸
  • 초기값이 없으면 쓰레기 값이 들어감
  • 스택 영역에 저장됨
void main(){
    if(1){
    	int num1 = 10;    // if 블록 안에서 변수를 선언
        printf("%d", num1);
    }
    printf("%d", num1);    // if 블록 밖에서 변수를 선언하지 않았기 때문에 에러
}

 

전역변수

  • 함수 블록 밖에서 선언하며 전체 함수에 영향을 미친다
  • 프로그램이 종료될 때 메모리상에서 소멸
  • 초기값이 없으면 0 값이 들어감
  • 데이터 영역에 저장됨
int num1;
void main(){
    num1 = 10;
    printf("%d", num1);    // 10
    func();
    printf("%d", num1);    // 20
}
void func(){
	num1 = 20;
}    // 1020 이 출력됨

 

정적변수

  • static 으로 선언하며 선언된 블록 내에서만 사용 가능
  • 함수가 종료되어도 소멸되지 않고 값이 그대로 유지됨
  • 프로그램이 종료될 때 메모리상에서 소멸
  • 초기값이 없으면 0이 입력되고, 단 한번만 초기화
  • 데이터 영역에 저장  
void main(){
    add(10);
    add(5);
    add(3);
}
int add(int i){
    static int sum = 0;    // 정적변수를 선언했기 때문에 앞에서 연산했던 값이 없어지지 않음
    sum = sun + i;
    printf("sum:%d\n", sum);    // \n 은 엔터
}    // 18로 출력됨

 

동적변수

  • 메모리 동적할당으로 생성되는 변수
  • Run time 시간에 메모리를 할당
  • 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적
  • 무조건 포인터를 사용해야 함
  • 힙 영역에 저장됨