-
20140324 (전역변수, 메모리 구조, 재귀함수)부산IT학원/스마트컨트롤러 2014. 3. 24. 17:35
26일차
--------------------
전 역 변 수
--------------------
- 지역변수와 다르게 어디서든 읽기 쓰기가 가능한 변수.
- 어떤 함수에서 쓰기 가능하기 위해 컴파일러가 제일 먼저 읽어야 하니
맨(include 밑에) 위에 선언한다.
- 기본적으로 0으로 초기화 돼있음.
- 변수가 만들어 지는 때
지역변수 : Run Time
전역변수 : Compile Time
- 지역변수는 Load 하면서 Mem에 할당됨.
- 전역변수는 컴파일당시에 생성되기 때문에 실행파일에 할당되어 있음.
ex) 예제 소스
#include <stdio.h>
void Add(int iVal);
int iNum;
int iNum1 = 10;
int iNum2;
int iNum3 = 20;
int iNum4;
int iNum5 = 30;
int iNum6;
int iNum7 = 40;
int main()
{
printf("iNum : 0x%08X \n", &iNum);
printf("iNum1 : 0x%08X \n", &iNum1);
printf("iNum2 : 0x%08X \n", &iNum2);
printf("iNum3 : 0x%08X \n", &iNum3);
printf("iNum4 : 0x%08X \n", &iNum4);
printf("iNum5 : 0x%08X \n", &iNum5);
printf("iNum6 : 0x%08X \n", &iNum6);
printf("iNum7 : 0x%08X \n", &iNum7);
printf("Add : 0x%08X \n", Add);
printf("main : 0x%08X \n", main);
printf("printf : 0x%08X \n", printf);
printf("iNum : %d \n", iNum);
Add(3);
printf("iNum : %d \n", iNum);
++iNum;
printf("iNum : %d \n", iNum);
printf("문자열 주소 : 0x%08X \n", "Welcome");
return 0;
}
void Add(int iVal)
{
if(0 == iNum)
{
printf("iVal : 0x%08X \n", &iVal);
}
iNum = iNum + iVal;
}출력 화면
위에서 보았듯이 전역변수로 선언되 있는 변수는
main에서도 Add에서도 접근이 가능하다.
자세히 볼게 전역변수들을 관찰해 보면
초기화된 변수와 초기화 안된 변수의 주소값이 몰려 있는게
다르다.
초기화된 변수는 함수들의 주소값에 더 가깝다.
또 상수의 주소도도 초기화된 변수들의 주소와 가깝다.
-----------------
재 귀 함 수
-----------------
- 자신을 다시 부르는 함수
- 사용을 비추천
ex) 예제 소스
#include <stdio.h>
void Recursive(int iNum);
int main()
{
Recursive(3);
return 0;
}
void Recursive(int iNum)
{
if(0 >= iNum)
{
return;
}
printf("Recursive call!! %d \n", iNum);
Recursive(iNum - 1);
}출력 화면
'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140326 (배열) (0) 2014.03.26 20140325 (배열, 문자열) (0) 2014.03.25 20140321 (함수, 지역변수) (0) 2014.03.21 20140320 (포인터, Hexa View, 함수) (0) 2014.03.20 20140319 (포인터, little endian, big endian, 포인터 연산) (0) 2014.03.19