static 변수는 외부와 내부로 구분되어 진다.
static int b; //외부 정적변수
{
static int a; //내부 정적변수
}
외부 정적변수와 내부 정적변수는 활동범위에 제약이 있다. 외부 정적변수는 자기가 속해 있는 모듈안에서만 사용할 때 사용한다. 모든 모듈에서 사용하고 싶을 땐 extern 키워드를 사용해야 한다. 내부 정적변수는 함수안에서 사용시 그 함수안에서만 사용이 가능하다. 즉 C++로 따졌을 때 class에서 private 변수로 사용하여 보호하는 것과 비슷한 맥락이다.
#include <stdio.h>
#include <stdlib.h>
void sub();
int main(int argc, char *argv[])
{
int i;
for(i = 0; i<3; i++)
{
sub();
printf("main i : %d\n\n", i);
}
system("PAUSE");
return 0;
}
void sub()
{
static int i=1;
auto int k =3;
printf("sub i : %d\t k : %d \t\n", i++,k++);
}
다음은 틀리기 쉬운 기억클래스 예제이다. 결과값을 예측해볼것.
#include <stdio.h>
#include <stdlib.h>
void sub();
int reset(), next(int), last(int), now(int);
int i=1;
int main(int argc, char *argv[])
{
auto int i,j;
i = reset();
for(j=0; j<3; j++)
{
printf("i = %d\t j = %d\n", i,j);
printf("next(i) = %d\n", next(i));
printf("last(i) = %d\n", last(i));
printf("now(i+j) = %d\n\n", now(i+j));
}
system("PAUSE");
return 0;
}
int reset(){return(i);}
int next(int j){return (j=i++);}
int last(int j){
static int i=10;
return (j=i--);
}
int now(int i)
{
auto int j=10;
return (i=j+=i);
}
static int b; //외부 정적변수
{
static int a; //내부 정적변수
}
외부 정적변수와 내부 정적변수는 활동범위에 제약이 있다. 외부 정적변수는 자기가 속해 있는 모듈안에서만 사용할 때 사용한다. 모든 모듈에서 사용하고 싶을 땐 extern 키워드를 사용해야 한다. 내부 정적변수는 함수안에서 사용시 그 함수안에서만 사용이 가능하다. 즉 C++로 따졌을 때 class에서 private 변수로 사용하여 보호하는 것과 비슷한 맥락이다.
#include <stdio.h>
#include <stdlib.h>
void sub();
int main(int argc, char *argv[])
{
int i;
for(i = 0; i<3; i++)
{
sub();
printf("main i : %d\n\n", i);
}
system("PAUSE");
return 0;
}
void sub()
{
static int i=1;
auto int k =3;
printf("sub i : %d\t k : %d \t\n", i++,k++);
}
다음은 틀리기 쉬운 기억클래스 예제이다. 결과값을 예측해볼것.
#include <stdio.h>
#include <stdlib.h>
void sub();
int reset(), next(int), last(int), now(int);
int i=1;
int main(int argc, char *argv[])
{
auto int i,j;
i = reset();
for(j=0; j<3; j++)
{
printf("i = %d\t j = %d\n", i,j);
printf("next(i) = %d\n", next(i));
printf("last(i) = %d\n", last(i));
printf("now(i+j) = %d\n\n", now(i+j));
}
system("PAUSE");
return 0;
}
int reset(){return(i);}
int next(int j){return (j=i++);}
int last(int j){
static int i=10;
return (j=i--);
}
int now(int i)
{
auto int j=10;
return (i=j+=i);
}
'Languages > C Language' 카테고리의 다른 글
함수 포인터, void형 포인터, 포인터 배열과 배열을 가리키는 포인터 (0) | 2011.12.28 |
---|---|
선택정렬 (0) | 2011.12.26 |
C Api, gotoxy(), blue() 함수 등등, 소스 및 사용법 (0) | 2011.12.22 |
재귀함수를 이용한 10진수 -> 2진수,16진수 변환 (0) | 2011.12.22 |