2024-소프트웨어과 1학년/C언어

2학기 중간고사 대비 자료 C언어[지속 업데이트]

simless786-it 2024. 9. 26. 13:18

9장: 변수와 함수

 

변수의 속성: 이름, 타입, 크기, 값+범위, 생존 시간, 연결

  • 범위(scope): 변수가 사용 가능한 범위, 가시성
  • 생존 시간(lifetime): 메모리에 존재하는 시간
  • 연결(linkage): 다른 영역에 있는 변수와의 연결 상태

전역 변수: 함수의 외부에서 정의

지역 변수: 함수의 내부에서 정의

 

<지역 변수(local variable)는 블록 안에 선언되는 변수>

지역 변수는 선언된 블록을 떠나면 안 됨.

이름이 같은 지역 변수: 블록만 다르면 이름은 같아도 된다.

지역 변수는 선언된 블록이 끝나면 자동으로 소멸된다.

 

<함수의 매개 변수>

함수의 헤더 부분에 정의되어 있는 매개 변수도 일종의 지역 변수이다. 즉 지역 변수가 지니는 모든 특징을 가지고 있다.

지역 변수와 다른 점은 함수 호출 시의 인수 값으로 초기화되어 있다는 점이다.

 

 

<전역 변수>

전역 변수(global variable)는 함수 외부에서 선언되는 변수이다. 

전역 번수의 범위는 소스 파일 전체이다. (초기값 0)

컴파일러가 프로그램 실행 시에 0으로 초기화한다.

 

 

<전역 변수의 사용>

  • 거의 모든 함수에서 사용하는 공통적인 데이터는 전역 변수로 한다.
  • 일부의 함수들만 사용하는 데이터는 전역 변수로 하지 말고 함수의 인수로 전달한다..

 

 

  • 변수의 범위는 대개 무엇으로 결정되는가?
    • 변수의 범위는 변수의 선언 위치에 따라 결정됨. 변수는 선언된 블록이나 함수 내에서만 유효하며, 이를 변수의 스코프라고 함.
  • 변수의 범위에는 몇 가지의 종류가 있는가?
    • C언어에서 변수의 범위는 크게 세 가지로 나눌 수 있습니다:
      1. 지역 변수: 함수나 블록 내부에서 선언된 변수로, 그 블록 내부에서만 유효합니다.
      2. 전역 변수: 함수 외부에서 선언된 변수로, 프로그램 전체에서 접근 가능합니다.
      3. 정적 변수: 함수 내에 선언되지만, 함수가 호출될 때마다 값이 초기화되지 않고 유지됩니다.
  • 파일 범위를 가지는 변수를 무엇이라고 하는가?
    • 파일 범위를 가지는 변수는 전역 변수라고 하며, 파일 내에서만 접근할 수 있습니다. 외부 파일에서 접근할 수 없도록 static 키워드를 사용하여 선언할 수 있습니다.
  • 블록 범위를 가지는 변수를 무엇이라고 하는가?
    • 블록 범위를 가지는 변수는 지역 변수라고 합니다. 중괄호({ })로 둘러싸인 블록 안에서 선언되며, 해당 블록이 종료되면 변수가 소멸됩니다.
  • 지역 변수를 블록의 중간에서 정의할 수 있는가?
    • 네, C언어에서는 블록의 중간에서도 변수를 정의할 수 있습니다. 다만, 해당 변수가 선언된 이후에만 사용할 수 있습니다.
  • 똑같은 이름의 지역 변수가 서로 다른 함수 안에 정의될 수 있는가?
    • 가능합니다. 지역 변수는 각각의 함수 내에서 독립적인 범위를 가지기 때문에, 다른 함수에서는 같은 이름을 사용할 수 있습니다.
  • 지역 변수가 선언된 블록이 종료되면 지역 변수는 어떻게 되는가?
    • 지역 변수가 선언된 블록이 종료되면 해당 변수는 소멸됩니다. 즉, 메모리에서 해제되고 더 이상 접근할 수 없습니다.
  • 지역 변수의 초기값은 얼마인가?
    • 초기값이 지정되지 않은 지역 변수는 **쓰레기 값(garbage value)**을 가집니다. 이는 메모리에 남아 있는 임의의 값을 가리키며, 반드시 초기화를 해줘야 합니다.
  • 함수의 매개 변수도 지역 변수인가?
    • 네, 함수의 매개변수 역시 해당 함수 내에서만 유효한 지역 변수입니다.
  • 전역 변수는 어디에 선언되는가?
    • 전역 변수는 모든 함수 외부에서 선언됩니다. 주로 파일의 상단부에 선언하며, 이 변수는 프로그램 전체에서 접근할 수 있습니다.
  • 전역 변수의 생존 기간과 초기값은?
    • 전역 변수는 프로그램이 시작될 때 초기화되며, 프로그램이 종료될 때까지 유효합니다. 초기화되지 않은 전역 변수는 0으로 자동 초기화됩니다.
  • 똑같은 이름의 전역 변수와 지역 변수가 동시에 존재하면 어떻게 되는가?
    • 같은 이름의 전역 변수와 지역 변수가 동시에 존재할 경우, 지역 변수가 우선됩니다. 즉, 지역 변수가 선언된 블록 안에서는 전역 변수를 가리키지 않고, 지역 변수를 참조합니다.

<생존 시간>

정적 할당(static allocation)

: 프로그램 실행 시간 동안 계속 유지

 

자동 할당(automatic allocation)

:블록에 들어갈 때 생성, 블록에서 나올 때 소멸

 

*정적 할당은 변수가 실행 시간 내내 존재하지만 자동 할당은 블록이 종료되면 소멸됨.

 

 

<생존 시간을 결정하는 요인>

변수가 선언된 위치, 저장 유형 지정자

 

<저장 유형 지정자>

auto, register, static, extern

 

<저장 유형 지정자 auto>

 

<저장 유형 지정자 static>

 

<저장 유형 지정자 register>

레지스터에 변수를 저장함.

CPU 안의 레지스터에 변수가 저장된다.

 

<volatile>

volatile지정자는 하드웨어가 수시로 변수의 값을 변경하는 경우에 사용된다. volatile로 지정하면 컴파일러는 최적화를 중지한다.