1 / 23

Chapter9. 변수영역

Chapter9. 변수영역. 지역변수와 전역변수 정적변수 레지스터변수. 변수의 종류와 영향범위에 따른 활용방법을 알아본다 . 변수의 종류에 따라 처리되는 우선순위를 알아본다. 1.1 지역변수. 지역변수 (Local Variable) : 실행되는 단위 블록 내에서만 유효함 . 선언된 블록의 영역을 넘어가면 효력이 없음 지역변수가 선언된 블록이 실행될 때 메모리에 할당되고 블록이 종료되면 메모리에서 자동으로 해제된다. 두 함수에서 사용하는 지역변수 a 는 , 변수명은 서로 같으나

gretel
Download Presentation

Chapter9. 변수영역

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter9.변수영역

  2. 지역변수와 전역변수 정적변수 레지스터변수

  3. 변수의 종류와 영향범위에 따른 활용방법을 알아본다. 변수의 종류에 따라 처리되는 우선순위를 알아본다

  4. 1.1 지역변수 • 지역변수(Local Variable) : • 실행되는 단위 블록 내에서만 유효함. • 선언된 블록의 영역을 넘어가면 효력이 없음 • 지역변수가 선언된 블록이 실행될 때 메모리에 할당되고 블록이 종료되면 메모리에서 자동으로 해제된다 두 함수에서 사용하는 지역변수 a는, 변수명은 서로 같으나 별개의 변수

  5. 1.1 지역변수 • 자동변수 • 초깃값을 지정하지 않으면, 시스템에서 자동으로 임의의 값을 할당하는 변수 • auto를 변수 a 앞에 붙이면 a는 자동 지역변수가 됨 • 키워드 auto : 자료형 앞에 붙일 수 있는 변수의 기억 클래스로, 자동변수라는 의미

  6. 1.2 전역변수 • 전역변수(Global Variable) • 모든 블록에서 사용할 수 있으며, 다른 파일에서도 사용할 수 있는 변수 • 변수 gVal이 전역변수라는 것을 변수명만 보더라도 알 수 있게 하려고,변수명에접두어g를 사용 그래서 주의!

  7. 1.2 전역변수 • 키워드 extern • 한 파일에서 전역변수로 선언된 변수를 다른 파일에서 사용하기 위해 씀 • 사용하려는 변수가 다른 곳에서 전역변수로 사용하고 있다고 알려줌 • extern 사용법

  8. 1.2 전역변수 • 예제 9-1) 지역변수와 전역변수 예제 // main.c파일 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 #include <stdio.h> #include "myheader.h“ intgVal = 1; int main(void) { int value = 10; printf("지역변수 value 값은 %d이다.\n", value); printf("전역변수 gVal값은 %d이다.\n", gVal); A( ); printf("함수 A( ) 실행 후\n"); printf("지역변수 value 값은 %d이다.\n", value); printf("전역변수 gVal값은 %d다.\n", gVal); return 0; }

  9. 1.2 전역변수 • 예제 9-1) 지역변수와 전역변수 예제 // myheader.h 01 void A( ); • // func.c 01 02 03 04 05 06 07 #include "myheader.h“ extern intgVal; void A( ) { int value = 20; gVal++; }

  10. 1.2 전역변수 • 혼자해보기9-1) 다음 소스코드에서 틀린 부분을 수정하시오. 그리고 출력 결과를 예측하시오. // main.c파일 01 02 03 04 05 06 07 08 09 10 11 12 13 14 #include <stdio.h> #include "myheader.h“ intgNumber = 20; int main(void) { int a = 10; int result; printf("전역변수 gNumber값은 %d이다.\n", gNumber); result = Sum(a); printf("함수 Sum( ) 실행 결과값은 %d이다\n", result); printf("전역변수 gNum값은 %d이다.\n", gNumberl); return 0; }

  11. 1.2 전역변수 • 혼자해보기9-1) 다음 소스코드에서 틀린 부분을 수정하시오. 그리고 출력 결과를 예측하시오. // myheader.h 01 int Sum(int a); • // func.c #include "myheader.h“ int Sum(int a) { gNumber += a; return gNumber; } 01 02 03 04 05 06 07

  12. 1.3 변수의 우선순위 • 변수의 우선순위를 살펴봐야 하는 이유 • 전역변수와 지역변수가 동일한 이름으로 선언될 수 있음 • 다른 블록에서도 같은 이름의 지역변수를 만들 수 있음 • 변수의 우선 순위 원칙 ① 지역변수 > 전역변수 ② 같은 지역변수라면, 하위 블록에서 선언한 지역변수 > 상위 블록에서 선언한 지역변수

  13. 1.3 변수의 우선순위 • 변수 number로 알아보는 우선순위

  14. 1.3 변수의 우선순위 • 변수 number로 알아보는 변수의 유효영역과 생명력

  15. 1.3 변수의 우선순위 • 예제 9-2) 변수의 유효영역 예제 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 #include <stdio.h> void A(); int Number = 1; int main(void) { int Number = 10; printf("지역변수 Number 값은 %d이다.\n", Number); { int Number ; Number = 20; printf("블록 안의 지역변수 Number 값은 %d이다.\n", Number); }

  16. 1.3 변수의 우선순위 • 예제 9-2) 변수의 유효영역 예제 16 17 18 19 20 21 22 23 24 25 26 printf("내부 블록 밖의 Number 값은 %d이다.\n", Number); A(); return 0; } void A() { Number++; printf("전역변수 Number 값은 %d다.\n", Number); }

  17. 2.1 정적변수란 • 정적변수(Static Variable) • 프로그램의 실행이 끝날 때까지 메모리에 계속 보존되는 변수 • 전역변수와 생명력이 동일 • 변수가 사용될 수 있는 유효영역은 선언되는 위치에 따라 다름

  18. 2.1 정적변수란 • 정적변수 선언 • 정적변수의초깃값 • 처음에 할당하지 않으면 임의의 값이 할당되지 않음 • 컴파일할 때에 한 번만 부여됨

  19. 2.2 내부 정적변수 • 내부 정적변수: 함수의 내부에서 선언한 정적 지역변수 • 즉, 함수 내부에서 선언해 사용함 • 변수값이 소멸되지 않고 계속 보존되기 때문에 지역변수 영역에서 쓰면서 프로그램이 종료될 때까지 값을 보존하고 싶을 경우에 사용 • 예) 함수의 호출 횟수를 알고 싶을 때

  20. 2.2 내부 정적변수 • 예제 9-3) 함수의 호출 횟수를 기록하는 예제 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> void CallNumber(); int main(void) { inti; for(i = 0; i < 5; i++) CallNumber(); return 0; } void CallNumber() { static int count = 1; int number = 1; printf("%d번째 호출되었습니다. \n", count++); printf("Number 값은 %d이다. \n\n", number++); }

  21. 3. 레지스터 변수 • 레지스터 변수(Register Variable) : • 연산 속도를 향상히키려고 CPU 내에 있는일반 레지스터를 기억장소로 사용 • 레지스터 변수의 선언 방법 • 레지스터 변수의 특징 • 레지스터 변수의 자료형은int, char, short 및 포인터형만 사용 • CPU의 레지스터에 저장되므로 처리속도가 일반변수보다 빠름 • 반복문의 반복 횟수를 결정하는 변수(첨자)에 주로 사용

  22. 3. 레지스터 변수 • 예제 9-4) 레지스터 변수를 사용하는 예제 01 02 03 04 05 06 07 08 09 10 11 12 13 #include <stdio.h> int main(void) { register int count = 1; int result = 0; for(count = 1; count <= 5; count++) result += count; printf("1부터 5까지 합은 %d다.\n", result); return 0; }

More Related