[C/C++] 변수 (지역변수, 전역변수)

2020. 6. 10. 19:31·Computer Science/Programming Language

변수 : 변수가 사용될 수 있는 범위에 따라 지역변수, 전역변수로 나누어짐

 

지역변수 (local variable) : 블록 안에서만 정의되는 변수

- 해당 블록 안에서만 접근과 사용 가능

   cf) 블록 : 중괄호로 둘러싸인 영역

- 블록이 시작할 때 스택(stack)이라는 메모리 공간에 만들어짐

- 지역 변수에 할당된 공간은 블록 끝에서 반환됨 -> 이때 지역 변수도 사라짐

- 지역변수는 반드시 초기화를 시켜주어야 함

   - 지역 변수는 컴파일러에 의하여 자동으로 0으로 초기화 되지 않음

   -> 초기값을 정해주지 않았다면 아무의미 없는 값(쓰레기값(garbage value))이 들어가 있음

 

< C언어와 C++언어에서의 지역변수 사용 차이> 

C 블록의 시작부분에서만 선언 가능( 중간에서는 선언 불가능)
C++ 블록의 어디에서든지 선언 가능

 

함수의 매개변수 : 함수의 헤더 부분에 정의 되어 있는 변수

- 일종의 지역변수 (지역변수가 지니는 모든 특징 갖고있음)

 지역변수와 다른점 : 함수를 호출할 때 넣어주는 인자 값으로 초기화 되어있음

 

전역변수 (global variable) : 함수의 외부에서 선언되는 변수

- 해당 소스 파일의 어느 곳에서든 사용 가능(소스파일 전체)

- 전역변수를 초기화하지 않으면 컴파일러에 의해 0으로 초기화 

- 전역변수는 프로그램 시작과 동시에 생성되어 프로그램이 종료 되기 전까지 메모리에 존재

- 전역변수는 블록 안에서만 사용하기에 부담이 있음

 

정적 지역 변수(static variable)

- 블록에서만 사용되지만 블록을 벗어나도 자동으로 제거 X

- 지역변수를 정적변수로 만듦 ( static 앞에 붙여서 사용)

- 프로그램이 시작할 때 메모리에 생성되고 프로그램 실행 종료 시 메모리에서 제거됨

- 정적변수는 이전값을 기억한다. 

 

#include <iostream>
using namespace std;

void sub(void) {
	int i = 0;
	static int s = 0;	//정적변수 선언
	i++;
	s++;
	cout << "( " << i << " , " << s << " )" << endl;

}
int main(void) {
	sub();	// (1,1)출력
	sub();	// (1,2) 출력
	sub();	//(1,3) 출력 
	return 0;
}

 

위의 예시를 보면

지역변수 i 는 sub()함수를 호출할 때마다 생성되고 호출이 끝나면 메모리에서 제거됨

정적 변수 s의 값은 한번 생성되면 함수의 호출이 끝나도 제거되지않기 때문에 이전의 값을 유지함

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > Programming Language' 카테고리의 다른 글

[C++] 참조자(reference)  (0) 2020.06.13
[C/C++] 동적 메모리 할당(dynamic memory allocation)  (0) 2020.06.12
[C++] 디폴트 매개변수 (default parameter)  (0) 2020.06.10
[JAVA] 데이터타입 - 참조 타입  (0) 2020.06.04
[JAVA] break문 사용  (0) 2020.06.01
'Computer Science/Programming Language' 카테고리의 다른 글
  • [C++] 참조자(reference)
  • [C/C++] 동적 메모리 할당(dynamic memory allocation)
  • [C++] 디폴트 매개변수 (default parameter)
  • [JAVA] 데이터타입 - 참조 타입
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    LNK2001
    mysql error
    오블완
    c++error
    leetcode
    cmd error
    런타임 에러
    해시
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[C/C++] 변수 (지역변수, 전역변수)
상단으로

티스토리툴바