전역변수는 프로그램종료전까지 죽지않는다. 아무함수나 다 사용가능
별도의값으로 초기화를 하지 않으면 메모리자체에 비트단위로 0이들어간다.
★컴파일시(컴파일type) 만들어진다.
Momery영역
(text)code 함수+상수
(초기화한변수?)data ┐전역변수(int형 변수 1000개는 4000byte)
(초기화하지않은변수)bss ┘(4000byte를 사용하지 않고 사용할자리를 만들라 명령)
heap 동적할당
Stack 지역변수(유동성메모리)
★지역변수는 실행시(run type) 만들어진다.
exe파일은 code,data,bss만 실행파일포함 heap,Stack는 실행시 생성
bus가 메모리용량을 결정(메모리의 최종크기는 버스와 관련있다)
32비트체제 4byte(버스가32개)
printf("%x\n", &iNum); // iNum의 메모리주소출력
printf("%08X\n", &iNum); // iNum의 메모리주소출력 8칸을비우고 왼쪽부터채운다.
printf("%p\n", &iNum); // iNum의 메모리주소출력
★cl *.* /link /DYNAMICBASE:NO // 컴파일후 실행시 메모리주소를 고정
#include <stdio.h>
void Add(int val);
int num; // 전역변수는 기본 0으로 초기화됨
int main(void)
{
printf("num : %d\n", num);
Add(3);
printf("num : %d\n", num);
num++; // 전역변수 num의 값 1 증가
printf("num : %d\n", num);
return 0;
}
void Add(int val) // num이 전역변수이므로 반환값 x
{
num += val; // 전역변수 num의 값 val만큼 증가
}
그레고리력은 윤년(2월 윤달)이 있는 해를 다음과 같은 규칙으로 정했습니다.
1) 4년으로 나누어지는 해는 윤달(2월은 29일)이 있다.
2) 그러나 100년으로 나누어지는 해는 윤달이 없다.
3) 그러나 400년으로 나누어지는 해는 윤달이 있다.
2) 그러나 100년으로 나누어지는 해는 윤달이 없다.
3) 그러나 400년으로 나누어지는 해는 윤달이 있다.
이 규칙을 만족해야만 그 해가 윤년(2월은 29일)이고
아닌 경우에는 평년(2월은 28일)입니다.
아닌 경우에는 평년(2월은 28일)입니다.
#include <stdio.h>
int main(void)
{
int x=0; // 지역변수 Stack부분에 저장되어있음
while(x!=1)
{
printf("입력(종료=1) : ");
scanf("%d", &x);
/* if(((x%4==0) && !(x%100==0)) || ((x%100==0) && (x%400==0)))
{
printf("윤년\n");
}
else
{
printf("평년\n");
}*/
if(x%400==0)
{
printf("윤년\n");
}
else if(x%100==0)
{
printf("평년\n");
}
else if(x%4==0)
{
printf("윤년\n");
}
else
{
printf("평년\n");
}
}
}
댓글 없음:
댓글 쓰기