본문 바로가기
C언어

C언어 기초- 지역변수 vs 전역변수

by 유노brain 2023. 3. 16.
반응형

1. 지역변수 와 전역변수 정의

 지역변수는 함수 내에서 정의되는 변수로써 함수의 출력이 끝나면 사라지는 변수입니다.

 

반대로 전역변수는 프로그램 전체에 쓸 수 있는 변수입니다.

 

즉 그렇기 때문에 전역변수는 모든 함수에서 이용이 가능한 변수입니다.

 

2. 지역변수 vs 전역변수

 그럼 지역변수와 전역변수가 동일한 이름으로 변수가 성립했을 때를 보겠습니다.

 

결론부터 말하면 지역변수를 따릅니다.

 

말로 설명하자면 지역 변수가 전역 변수를 가려서 함수 내에서는 지역 변수를 사용하기 때문입니다.

 

3. 예시문장

 

#include<stdio.h>

int a = 10;

void func() {
	int a = 20;
	printf("%d\n", a);
}

int main() {
	func();
	printf("%d\n", a);
	return 0;
}

 

위 식에서 보면 출력 결과는 20, 10이 나옵니다.

먼저 func()함수에서는 지역 변수 int a= 20이 나오기 때문에 20이 출력이 되고

아래 프린트 문에서는 %d가 전역변수인 int a = 10을 받기 때문에 10이 출력이 됩니다.

 

#include<stdio.h>

int a = 0;

void func1() {
	int a = 100;
	a++;
	printf("func1 : %d\n", a);
}
void func2() {
	printf("func2-1 :%d\n", a);
	a++;
	printf("func2-2 :%d\n", a);
}

int main() {
	func1();
	printf("main1 :%d\n", a);
	func2();
	printf("main2 :%d\n", a);
	return 0;
}

 

다음 예제를 보겠습니다.

 

먼저 여러분들께서 한번 fun1, func2-1, func2-2, main1, main2의 값이 어떤 값이 나올지 생각해보세요.

 

정답:
func1 : 100
func2-1 : 0
func2-2 : 1
main1 : 0
main2 : 1

이렇게 나오는 이유에 대해 설명해드리겠습니다.

 

func1의 경우 지역변수를 a=100으로 설정하였기 때문에 func1의 값이 100이 나오는 것을 볼 수 있습니다.

 

func2-1의 경우 전역변수만 받기 때문에 0이 나오는 것을 볼 수 있습니다.

 

func2-2의 경우 함수 안에 a++가 있으므로 a에 1을 증가한 값 1이 나오는 것을 볼 수 있습니다.

 

main1을 보겠습니다. 이미 위에서 func1의 함수가 출력을 끝마쳤기때문에 지역변수 a=100은 사라지게됩니다.

즉 main에서는 전역변수 a=0을 받기 때문에 답이 0이 나오게 됩니다.

 

이제 가장 헷갈리는 main2를 보겠습니다.

main2의 경우 1이 나오게 되는데요. 

그 이유는 func2의 함수에서 전역변수를 1증가시키는 a++가 있습니다.

여기서 a는 func1 함수와는 다른 전역변수이기 때문에 전역변수가 1증가한것을 볼 수 있습니다.

그렇기 때문에 main2의 값은 1이 나오게 되는 겁니다.

반응형

댓글