본문 바로가기

IT전공관련

c언어 메모리 구조(코드)

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
30
31
32
33
34
35
36
#include<stdio.h>
#include<stdlib.h>
 
int num = 0;                // num은 전역변수, num1은 스태틱 변수로
int abc(int a, int b) {        // 프로그램이 종료되기 전까지    
    static num1;            // 소멸되지 않고, 데이터 영역에 포함되어 있다.
    int temp;                // 5줄과 7줄은 각각 매개변수, 지역변수로
    if (b > a) {            // 함수가 호출되었을때 같이 호출되었다가
        temp = a;            // 함수가 종료되면 소멸하며, 스택영역에 포함되어있다.
        a = b;
        b = temp;
    }
    if (num == 1) {            //전역변수 num이 1이면 a를 더한다.
        num1 += a;
        return num1;
    }
    num1 = a;
    return (a - b);
}
int main() {
    int q, w, i;
    int *arr;
    scanf("%d %d"&q, &w);                                    // printf와 scanf는 코드 영역에 속한다
    printf(">> %d ? %d  = %d <<\n", q, w, abc(q,w));        //
    scanf("%d %d"&q, &w);                                    // num1은 스태틱 변수 즉 사라지지 않으므로
    num = 1;                                                // 23줄에서 입력한 것 중에 큰값과 25줄에서 입력한것중에 큰값이
    printf(">> num1  = %d <<\n", abc(q, w));                // 합해진 결과가 나온다!
    arr = (int*)malloc(sizeof(int* 5);                    // 동적할당을 통해 heap영역에 접근
    for (i = 0; i < 5; i++) {                                    
        arr[i] = i;                                            // 동적할당한 arr에 배열처럼 값을 넣어주고
    }
    for (i = 0; i < 5; i++) {                                    
        printf("arr[%d] = %d\n", i, arr[i]);                // 배열처럼 값을 출력
    }
    return 0;
}
cs