[지역 변수(자유 변수)]
→ 일정 지역에서만 사용 가능한 변수
특징
- 지역 변수는 사용 범위가 블록 내부로 제한되므로 다른 함수에서는 사용할 수 없다.
- 지역 변수는 이름이 같아도 선언된 함수가 다르면 각각 독립된 저장 공간을 갖는다.
장점
- 메모를 효율적으로 사용한다.
- 지역 변수는 함수 내부에서 사용되기 때문에 함수가 반환되면 저장 공간을 계속 유지할 필요가 없다.
- 디버깅에 유리하다.
- 지역 변수는 값에 문제가 있을경우 수정하기 쉽다.
[전역 변수]
→ 프로그램 전체에서 사용가능한 변수
→ 함수 밖에서 선언
#include <stdio.h>
assign10();
assign20();
int a; //1번 a
int main() {
printf("a의 값1: %d\\n", a);
assign10();
assign20();
printf("a의 값2: %d\\n", a);
return 0;
}
assign10(){
a = 10;
}
assign20(){
int a; //2번 a
a = 20;
}
위와 같은 상황에서 a는 최종적으로 어떤 값을 가질까? 10이다.
전역 변수와 같은 이름의 지역 변수
→ 전역 변수와 지역 변수의 이름이 같다면 지역 변수를 먼저 사용하게 된다. 즉 a = 20; 에서 a는 2번 a를 사용한다는 의미이다.
전역 변수의 문제점
- 전역 변수의 이름을 바꾸면 그 변수를 사용하는 모든 함수를 찾아서 수정해야한다.
- 전역 변수의 값이 잘못된 경우 접근 가능한 모든 함수를 의심해야한다.
- 코드 블록 내에 같은 이름의 지역 변수를 선언하면 거기서는 전역 변수를 사용할 수 없다.
[정적 지역 변수(static)]
→ 힘수 내부에 선언하는 전역 변수
[자동 변수]
#include <stdio.h>
void auto_func(void);
int main() {
int i;
for (i=0; i<5; i++){
auto_func();
}
return 0;
}
void auto_func(void){
auto int a = 0;
a++;
printf("%d", a);
}
//출력
//11111
[지역 변수]
#include <stdio.h>
void static_func(void);
// 여기서 a는 선언된 것과 같다.
int main() {
int i;
for (i=0; i<5; i++){
static_func();
}
return 0;
}
void static_func(void){
static int a = 0;
a++;
printf("%d", a);
}
//출력
//12345
모든 특징이 전역변수와 같지만 함수 내부에서 사용할 수 있다는 점은 다르다.
전역변수와 같기 떄문에 메모리 공간을 함수가 반환이 되어도 유지한다.
[사용하는 이유]
→ 함수를 반환해도 값을 메모리에 유지하고 싶을 때
[레지스터 변수]
→ cpu 내부에 있는 저장공간을 사용한다.
'문법관련 > C' 카테고리의 다른 글
14.2 포인터 배열 (0) | 2024.08.07 |
---|---|
14.1 다차원 배열 (0) | 2024.08.07 |
12.2 문자열 연산함수 (0) | 2024.06.27 |
12.1 문자열과 포인터 (0) | 2024.06.26 |
11.3 getchar(), putchar() (0) | 2024.06.26 |