9장: 변수와 함수
변수의 속성: 이름, 타입, 크기, 값+범위, 생존 시간, 연결
- 범위(scope): 변수가 사용 가능한 범위, 가시성
- 생존 시간(lifetime): 메모리에 존재하는 시간
- 연결(linkage): 다른 영역에 있는 변수와의 연결 상태
전역 변수: 함수의 외부에서 정의
지역 변수: 함수의 내부에서 정의
<지역 변수(local variable)는 블록 안에 선언되는 변수>
이름이 같은 지역 변수: 블록만 다르면 이름은 같아도 된다.
지역 변수는 선언된 블록이 끝나면 자동으로 소멸된다.
<함수의 매개 변수>
함수의 헤더 부분에 정의되어 있는 매개 변수도 일종의 지역 변수이다. 즉 지역 변수가 지니는 모든 특징을 가지고 있다.
지역 변수와 다른 점은 함수 호출 시의 인수 값으로 초기화되어 있다는 점이다.
<전역 변수>
전역 변수(global variable)는 함수 외부에서 선언되는 변수이다.
전역 번수의 범위는 소스 파일 전체이다. (초기값 0)
컴파일러가 프로그램 실행 시에 0으로 초기화한다.
<전역 변수의 사용>
- 거의 모든 함수에서 사용하는 공통적인 데이터는 전역 변수로 한다.
- 일부의 함수들만 사용하는 데이터는 전역 변수로 하지 말고 함수의 인수로 전달한다..
- 변수의 범위는 대개 무엇으로 결정되는가?
- 변수의 범위는 변수의 선언 위치에 따라 결정됨. 변수는 선언된 블록이나 함수 내에서만 유효하며, 이를 변수의 스코프라고 함.
- 변수의 범위에는 몇 가지의 종류가 있는가?
- C언어에서 변수의 범위는 크게 세 가지로 나눌 수 있습니다:
- 지역 변수: 함수나 블록 내부에서 선언된 변수로, 그 블록 내부에서만 유효합니다.
- 전역 변수: 함수 외부에서 선언된 변수로, 프로그램 전체에서 접근 가능합니다.
- 정적 변수: 함수 내에 선언되지만, 함수가 호출될 때마다 값이 초기화되지 않고 유지됩니다.
- C언어에서 변수의 범위는 크게 세 가지로 나눌 수 있습니다:
- 파일 범위를 가지는 변수를 무엇이라고 하는가?
- 파일 범위를 가지는 변수는 전역 변수라고 하며, 파일 내에서만 접근할 수 있습니다. 외부 파일에서 접근할 수 없도록 static 키워드를 사용하여 선언할 수 있습니다.
- 블록 범위를 가지는 변수를 무엇이라고 하는가?
- 블록 범위를 가지는 변수는 지역 변수라고 합니다. 중괄호({ })로 둘러싸인 블록 안에서 선언되며, 해당 블록이 종료되면 변수가 소멸됩니다.
- 지역 변수를 블록의 중간에서 정의할 수 있는가?
- 네, C언어에서는 블록의 중간에서도 변수를 정의할 수 있습니다. 다만, 해당 변수가 선언된 이후에만 사용할 수 있습니다.
- 똑같은 이름의 지역 변수가 서로 다른 함수 안에 정의될 수 있는가?
- 가능합니다. 지역 변수는 각각의 함수 내에서 독립적인 범위를 가지기 때문에, 다른 함수에서는 같은 이름을 사용할 수 있습니다.
- 지역 변수가 선언된 블록이 종료되면 지역 변수는 어떻게 되는가?
- 지역 변수가 선언된 블록이 종료되면 해당 변수는 소멸됩니다. 즉, 메모리에서 해제되고 더 이상 접근할 수 없습니다.
- 지역 변수의 초기값은 얼마인가?
- 초기값이 지정되지 않은 지역 변수는 **쓰레기 값(garbage value)**을 가집니다. 이는 메모리에 남아 있는 임의의 값을 가리키며, 반드시 초기화를 해줘야 합니다.
- 함수의 매개 변수도 지역 변수인가?
- 네, 함수의 매개변수 역시 해당 함수 내에서만 유효한 지역 변수입니다.
- 전역 변수는 어디에 선언되는가?
- 전역 변수는 모든 함수 외부에서 선언됩니다. 주로 파일의 상단부에 선언하며, 이 변수는 프로그램 전체에서 접근할 수 있습니다.
- 전역 변수의 생존 기간과 초기값은?
- 전역 변수는 프로그램이 시작될 때 초기화되며, 프로그램이 종료될 때까지 유효합니다. 초기화되지 않은 전역 변수는 0으로 자동 초기화됩니다.
- 똑같은 이름의 전역 변수와 지역 변수가 동시에 존재하면 어떻게 되는가?
- 같은 이름의 전역 변수와 지역 변수가 동시에 존재할 경우, 지역 변수가 우선됩니다. 즉, 지역 변수가 선언된 블록 안에서는 전역 변수를 가리키지 않고, 지역 변수를 참조합니다.
<생존 시간>
정적 할당(static allocation)
: 프로그램 실행 시간 동안 계속 유지
자동 할당(automatic allocation)
:블록에 들어갈 때 생성, 블록에서 나올 때 소멸
*정적 할당은 변수가 실행 시간 내내 존재하지만 자동 할당은 블록이 종료되면 소멸됨.
<생존 시간을 결정하는 요인>
변수가 선언된 위치, 저장 유형 지정자
<저장 유형 지정자>
auto, register, static, extern
<저장 유형 지정자 auto>
<저장 유형 지정자 static>
<저장 유형 지정자 register>
레지스터에 변수를 저장함.
CPU 안의 레지스터에 변수가 저장된다.
<volatile>
volatile지정자는 하드웨어가 수시로 변수의 값을 변경하는 경우에 사용된다. volatile로 지정하면 컴파일러는 최적화를 중지한다.
'2024-소프트웨어과 1학년 > C언어' 카테고리의 다른 글
C언어 9~12장 정리 pdf (0) | 2024.10.07 |
---|---|
C언어 9장 (1) | 2024.10.07 |
[C언어]7장 반복문 (1) | 2024.09.10 |
[C언어]6장_조건문 (0) | 2024.09.10 |
[아기대학생김따루]비주얼 스튜디오(Visual studio)최신 버전 다운로드 설치 방법 (4) | 2024.09.05 |