본문 바로가기
코스웨어/16년 스마트컨트롤러

20160315_김도관_업무일지_C언어_if문_전역변수,지역변수

by 알 수 없는 사용자 2016. 3. 17.
728x90
반응형

1.if문

if (만약에~~)

조건문에 따라 참,거짓을 판별 해서 {} 내부의 명령을 실행함


형식

1
2
3
4
5
6
7
8
if (조건문)
{
    실행될부분;
}
else
{
    해당조건문에 맞지않을때 실행;
}
cs



ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void)
{
    int iNum;
    printf("숫자 입력:");
    scanf("%d",&iNum);
 
    if(  100 < iNum )
    {
        printf("100보다 큰수입니다\n");
    }else{
        printf("100보다 작은수입니다\n");
    }
    return 0;
}
cs


7번 :  scanf로 값을 입력받음

9번 :  iNum에 입력받은 값이 100보다 작을때

11번 : "100보다 큰수입니다" 출력

12번 : 100보다 작지 않은 모든경우에 "100보다 작은수 입니다" 출력


출력 :




2.전역 변수, 지역변수


메모리 구조


1.CODE

코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일 메모리 


2.DATA

전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장됨

초기화되면 DATA영역에 저장

초기화 되지 않으면 BSS (Block Stated Symbol)영역 에 저장됨


3.HEAP

필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역

동적 데이터 영역이라고 부르며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역


4.STACK

프로그램이 자동으로 사용하는 임시 메모리 영역

지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역


1.지역변수 (local variable)

변수가 선언된곳에서만 사용가능

선언한 곳을 벗어나면 메모리에서 제거됨


2.전역변수 (global variable)

선언한곳외에서도 어느함수에서건 불러와서 사용가능한 변수

프로그램이 종료될때까지 메모리공간을 계속 차지하며 프로그램 시작시 메모리공간에 할당되는 특징을 가짐(메모리 낭비)

별도로 초기화 하지 않아도 비트 0으로 초기화 되어있음


형식 

1
2
3
4
5
6
7
8
#include <stdio.h>
 
int A; // 전역변수
int main()
{
    int B = 0// 함수내에 있으므로 지역변수
    return 0;
}
cs



EX 1) 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
int D; // 전역변수
int E = 99;
int F;
int G = 98;
int H;
int main(void)
{
    int A = 0// 함수내에 있으므로 지역변수
    int B;
    int C = 100;
    
    printf("C =      %p\n",&C);
    printf("B =      %p\n",&B);
    printf("A =      %p\n",&A); //stack 영역
    printf("-----------------\n");
    
    printf("E =      %p\n",&E); // 값이 있으므로 DATA 영역
    printf("G =      %p\n",&G);
    printf("-----------------\n");
    printf("H =      %p\n",&H);
    printf("F =      %p\n",&F);
    printf("D =      %p\n",&D); //없으므로 BSS
    printf("-----------------\n");
    printf("printf = %p\n",printf); //
    printf("main =   %p\n",main);
    return 0;
}
cs


3~7번 :    전역변수 

10~12번 :  지역변수

14~16번 : 지역변수로써 stack영역에 주소를 가짐

19~20번 : 전역변수이고 값을 가진상태이므로 DATA영역에 주소를 가짐

22~24번 : 값이 없으므로 BSS영역에 주소를 가짐

26~27번 : main 이나 printf는 CODE영역


EX1 출력:





EX 2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int A; // 전역변수 초기화하지않으면 비트단위로 0이 들어감 bin 0
 
void smart(void);
 
int main()
{
    //int A = 100;
    
    printf("%d\n",A); // printf가 속해있는 함수내에서 A 먼저찾고 그다음 전역변수 찾음
    smart();    
    printf("%d\n",A);
    return 0;
}
 
void smart()
{
    A = 99;    
}
cs


11번 : 함수내의 A 값 출력 ( 즉 전역변수값 0)

12번 : smart() 함수 호출

13번 : 지역변수인 A의 값 출력(smart의 A값 99)


EX2 출력:




728x90