C

C언어에서 변수를 처리하는 방법

에드장 2021. 2. 10. 09:55

프로그램 메모리 주소

코드 영역 데이터 영역 힙 영역 스택 영역
소스 코드 전역 변수
정적 변수
동적 할당 변수 지역 변수
매개 변수

 

 

전역 변수(Global Variable)

어디서든 접근 가능한 변수

main 함수가 실행되기 전에 프로그램의 시작과 동시에 메로리에 할당됩니다

프로그램의 크기가 커질 수록 전역 변수로 인해 프로그램이 복잡해질 수 있습니다

메모리의 데이터 영역에 적재됩니다

 

 

전역 변수를 활용한 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int a = 5;
 
void changevalue() {
    a = 10;
}
 
int main(void) {
    printf("%d\n", a);
    changevalue();
    printf("%d\n", a);
    system("pause");
    return 0;
}
 
cs

 

 

 

지역 변수(Local Variable)

 

특정한 블록(Block)에서만 접근할 수 있는 변수를 말합니다

함수가 실행될 때마다 메모리에 할당되어 함수가 종료되면 메모리에서 해제됩니다

메모리의 스택 영역에 기록됩니다

 

 

 

지역변수를 활용한 예시

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void) {
    int a = 7;
    if (1) {
        int a = 5;
    }
    printf("%d\n", a);
    system("pause");
    return 0;
}
 
cs

블록 안에서 선언된  int a = 5 는 블록안에서만 사용됩니다

 

정적 변수(Static Variable)

특정한 블록에서만 접근할 수 있는 변수

프로그램이 실행될 때 메모리에 할당되어 프로그램이 종료되면 메모리에서 해제됩니다

메모리의 데이터 영역에 적재됩니다

 

 

정적 변수를 활용한 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
void process() {
    static int a = 5;
    a = a + 1;
    printf("%d\n", a);
}
 
int main(void) {
    process();
    process();
    process();
    system("pause");
    return 0;
}
 
cs

 

레지스터 변수(Register Variable)

메인 메모리 대신 CPU의 레지스터를 사용하는 변수

레지스터는 매우 한정되어 있으므로 실제로 레지스터에서 처리될 지는 장답할 수 없습니다

 

 

레지스터 변수를 활용한 예시

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void) {
    register int a = 10, i;
    for (i = 0; i < a; i++) {
        printf("%d ", i);
    }
    system("pause");
    return 0;
}
 
cs

 

함수의 매개변수가 처리될 때 두 가지 방법이 있습니다

1.값에 의한 전달 방식(단지 값을 전달하므로 함수 내에서 변수가 새롭게 생성됩니다.)

2.참조에 의한 전달 방식(주소를 전달하므로 원래의 변수 자체에 접근할 수 있습니다.)

 

 

 

값에 의한 전달 방식(ADD 함수)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
void add(int a, int b) {
    a = a + b;
    printf("%d\n", a);
}
 
int main(void) {
    int a = 7;
    add(a, 10);
    printf("%d\n", a);
    system("pause");
    return 0;
}
 

cs

 

 

 

참조에 의한 전달 방식(ADD함수)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void add(int *a) {
    *= (*a) + 10;
}
 
int main(void) {
    int a = 7;
    add(&a);
    printf("%d\n", a);
    system("pause");
    return 0;
}
 
cs

매개변수로 포인터 변수를 보냅니다

 

위와 같이 함수에 데이터를 전달하는 방법은

값을 전달하는 방식

주소를 전달하는 방식 두가지가 있습니다.