[get_next_line] 지역변수, 전역변수, 정적변수

 

gnl과제를 수행하면서 지역변수, 전역변수, 정적변수의 개념과 차이점은 어떤 것이 있는지 정리해본 내용이다.

 

지역 변수(local variable)

지역 변수란 '블록' 내에서 선언된 변수를 의미합니다.

지역 변수는 변수가 선언된 블록 내에서만 유효하며, 블록이 종료되면 메모리에서 사라집니다.

**여기서 블록이란 중괄호로 만들어진 영역을 뜻합니다.**

 

이러한 지역 변수는 메모리상의 스택(stack) 영역에 저장되며, 초기화하지 않으면 의미 없는 값(쓰레기값)으로 초기화됩니다.

함수의 매개변수 또한 함수 내에서 정의되는 지역 변수로 취급됩니다

 

이 지역변수들은 해당 블록을 벗어나면 소멸하게 됩니다.

따라서 함수에서 선언된 변수가 있다면 그 지역변수는 함수가 호출될 때마다 매번 새롭게 할당됩니다. 

 

 

전역 변수(global variable)

전역 변수란 함수의 외부에서 선언된 변수를 의미합니다.

전역 변수는 프로그램의 어디에서나 접근할 수 있으며, 프로그램이 종료되어야만 메모리영역에서 사라집니다.

 

이러한 전역 변수는 메모리상의 데이터(data) 영역에 저장되며, 직접 초기화하지 않아도 0으로 자동 초기화됩니다.

** 함수내에서 전역변수와 같은 이름의 지역변수를 선언하여 사용하게되면 **

** 함수 내에서 선언된 지역 변수는 같은 이름의 전역 변수를 덮어쓰기 때문에 **

** 함수내에서는 전역변수로 접근 할 수 없게 됩니다 **

 

정적 변수(static variable)

C언어에서 정적 변수란 static 키워드로 선언한 변수를 의미합니다.

이렇게 선언된 정적 변수는 지역 변수와 전역 변수의 특징을 모두 가지게 됩니다.

함수 내에서 선언된 정적 변수는 전역 변수처럼 단 한 번만 초기화되며(초기화는 최초 실행 시 단 한번만 수행됨), 프로그램이 종료되어야 메모리상에서 사라집니다.

또한, 이렇게 선언된 정적 변수는 지역 변수처럼 해당 함수 내에서만 접근할 수 있습니다.

=> 프로그램에 종료될때 까지 저장된 값을 보존할 수 있다.

 

 

**전역변수와 정적변수는 따로 초기화를 하지않아도 자동으로 0으로 초기화가 되어있다**

이는 메모리상에서 변수의 저장위치가 다르기 때문에 발생하는 결과이다.

 

아래 링크에서 자세한 설명을 볼 수 있다.

 

[C, C++] 전역변수와 정적변수가 0으로 초기화되는 이유

전역변수, 정적변수, 지역변수 초기화를 하지 않은 전역변수, 정적변수, 지역변수를 선언하고 출력해보았다. int g; // 전역변수 int main(void){ static int s; // 정적변수 int l; // 지역변수 printf("global :..

hydroponicglass.tistory.com

 

반응형

'42seoul > get_next_line' 카테고리의 다른 글

[get_next_line] 저수준 파일 입출력  (0) 2020.11.24

+ Recent posts