c언어에서의 변수의 기억 클래스
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1 활용 범위에 따른 분류
1.1 지역 변수(local variable)
1.2 전역 변수(global variable)

2 기억 방식과 장소에 따른 분류
2.1 자동 변수(automatic variable)
2.2 정적 변수(static variable)
2.3 레지스터 변수(register variable)
2.4 외부 변수(external variable)

3 기억 클래스의 특징

본문내용

변수가 우선한다.
[ 예제 8-4.C ]
#include
main()
{
auto int x = 10 ;
{
int y = 20 ;
printf(" x = %d, y =
}
{
printf(" x = %d, y =
}
printf(" x = %d, y =
}
2.2 정적 변수(static varlable)
어떤 프로그램(함수)의 종료 후에도 그 값이 소멸되지 않고 보관되어, 다시 호출될 때 그 직전의 값을 참조할 수 있다.
정적 변수의 초기화는 프로그램 컴파일시에 단 한번만 하게 된다.
정적 변수는 선언시 형 앞에 static 이라는 키워드를 사용한다.
예) static int a=10, b=20 ;
정적 변수는 함수 내에서 선언되거나 , 함수, 외부에서 선언된다.
예)
main()
{
static int a=0, b=0 ;
. . . . . .;
}
static int a=10, b=20 ;
main()
{
. . . . . .;
}
정적 변수는 전역 변수와 같이 데이터(data)영역에 저장된다.
변수를 초기화하는 부분은 반드시 static 다음에 기술해야 한다. 만약 다음 행에서 대입문을 사용하여 초기화하면 함수가 실행될 때마다 애써 기억된 데이터가 지워지고 다시 초기와 된다.
#include
main()
{
int i;
for(i=0; i<5; ++I)
sub1( ) ;
}
sub1( )
{
static int a = 10 ;
++a ;
printf(" a의 값 =
}
#include
main()
{
int i ;
for(i=0; i<5 ; ++i)
sub1( ) ;
}
sub1( )
{
static int a ;
a = 10 ;
++a ;
printf(" a의 값 =
}
함수 내부에서 선언된 정적 변수는 그 함수의 지역 변수가 되기 때문에 다른 함수 에서는 참조할 수 없다. 그러나 자동 변수와 다른 점은 기억 장소가 스택이 아니고 주기억 장치에 할당되기 때문에 프로그램이 시작된 후 끝날 때까지 변수의 값이 보존된다.
#include
main()
{
int i;
for(i=0; i<5; ++i)
func() ;
}
func()
{
int q = 5 ;
printf(" q의 값 =
++q ;
}
#include
main()
{
int i ;
for(i=0; i<5 ; ++i)
func() ;
}
func()
{
static int q = 5 ;
printf(" q의 값 =
++q ;
}
함수 외부에서 선언된 정적 변수는 프로그램의 어디에서나 참조가 가능한 전역 변수이며, 정적인 기억 장소에 변수의 값이 저장되어 있으므로 프로그램이 끝날 때까지 보존된다.
[ 예제 8-5.C ]
#include
static int k ;
main()
{
int k = 10 ;
func1() ;
func2() ;
printf(" main 함수의 k의 값 =
}
func1 ()
{
++k ;
printf(" func1 함수의 k의 값 =
}
func2 ()
{
++k ;
printf(" func2 함수의 k의 값 =
}
2.3 레지스터 변수(register varlable)
기억할 데이터의 값을 메모리에 저장하지 않고, 직접 CPU 내부의 레지스터에 기억시키는 변수를 말한다.
반복문인 for문이나 while문 등의 제어 변수를 레지스터에 기억시켜 반복 처리하면 실행 속도를 높일 수 있다.
일반적인 변수는 메모리에 저장된 데이터를 일단 CPU내의 레지스터로 가져와 연산을 하고, 연산 결과를 다시 메모리에 저장하는 방식이나, 레지스터 변수는 직접 게지스터에 값을 저장해 두고 연산을 실행하므로 처리 속도가 매우 빠르다.
일반적으로 레지스터 변수는 3개까지 가능하고, 많이 지정해서 사용하여 사용 가능한 레지스터가 없을 때 레지스터 변수는 자동 변수로 할당된다.
레지스터 변수는 선언시 형 앞에 register라는 키워드를 사용한다.
예) register int a, b ;
레지스터 변수의 사용 방법은 자동 변수와 동일하다.
[ 예제 8-6.C ]
#include
main()
{
register int i, sum=0 ;
for(i=0; i<=100 ; ++I)
sum += i;
printf(" 1부터 100까지의 합 =
}
2.4 외부 변수(external varlable)
독립된 여러개의 파일에 프로그램을 분활하여 작성하고, 이 각각의 파일은 독립적으로 컴파일이 가증하다. 이 독립된 파일들 간에 단순한 변수들을 선언할 때 데이터를 공유할 수 있는 기억 클래스가 외부 변수의 선언이다.
외부 변수는 선언시 형(type) 앞에 extern 이라는 키워드를 사용한다.
모듈 A에서 변수 i는 일반적인 전역 변수로 선언되어 있다.
보듈 B에서 변수 i는 외부 변수이고 전역 변수로 선언되어있다.
모듈 c에서 변수 i는 외부 변수이고 지역 변수로 선언되어 있다.
외부 변수의 선언
extern 데이터형 변수명 ;l
3 기억 클래스의 특징
변수의 기억 클래스와 유효 범위 및 특징을 살펴보면 다음과 같다.
기억클래스
키워드
기억클래스
기억장소
유효범위
자동 변수
auto
또는 생략
함수내부
(지역변수)
스택
선언된 함수 내에서만 유효
정적 변수
static
static
함수내부
함수외부
메모리
메모리
선언된 함수 내에서만 유효
선언된 변수 아래 모듈 전 함수에서 유효
외부 변수
extern
estern
함수외부
함수내부
없 음
없 음
선돈도니 외부 변수 아래 모둘 전 함수에서 유효
선언된 함수내에서만 참조 가능
레지스터 변수
register
함수내부
레지스터
선언된 함수 내에서만 유효
기억 클래스의 성격과 특징에 따라 변수를 다음과 같이 정의하는 것이 프로그램 작성자에게 우리하다.
. 일반적인 경우 : 자동 변수를 사용하며 auto는 생략한다.
. 연산 속도를 빠르게 할 경우 : 레지스터 변수를 사용한다.
. 프로그램 끝날 때까지 값을 유지하고 싶은 경우 : 내부 static 변수르 사용한다.
. 프로그램 전체에서 변수르 공유하고 싶을 경우 : 전역 변수를 사용한다.
  • 가격3,500
  • 페이지수10페이지
  • 등록일2008.01.06
  • 저작시기2007.12
  • 파일형식한글(hwp)
  • 자료번호#445998
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니