#include <stdio.h>
void assign(void);
int main(void){
auto int a = 0;
assign();
printf("main function a : %d\n", a);
return 0;
}
void assign(void){
int a;
a = 10;
printf("assign function a : %d\n", a);
}
- **`main` 함수**:
- `auto int a = 0;`를 통해 `main` 함수의 지역 변수 `a`를 선언하고 0으로 초기화합니다. `auto` 키워드는 지역 변수의 기본 저장 클래스를 지정하며, 일반적으로 생략됩니다. 이 변수는 `main` 함수 내에서만 유효합니다.
- `assign` 함수를 호출합니다. 이 함수는 별도의 지역 변수 `a`를 선언하고, 이 변수에 10을 할당한 뒤 출력합니다.
- `assign` 함수 호출 후, `main` 함수의 `a` 변수 값(0으로 초기화된 상태)을 `printf` 함수를 사용하여 출력합니다. 이때 출력되는 값은 `main` 함수 내의 `a` 값이므로 0입니다.
- **`assign` 함수**:
- 이 함수 내에서 별도의 지역 변수 `a`를 선언하고, 이에 10을 할당합니다. 이 `a`는 `assign` 함수 내에서만 유효한 지역 변수입니다.
- 함수 내에서 지역 변수 `a`의 값을 `printf` 함수를 통해 출력합니다. 출력된 값은 이 함수 내에서 `a`에 할당된 값인 10입니다.
이 예제는 함수 간 변수의 범위와 독립성을 보여주는 좋은 예시입니다.
`main` 함수와 `assign` 함수에서 선언된 `a` 변수는 이름은 같지만 서로 다른 메모리 주소를 가지는 독립된 변수입니다.
따라서 하나의 함수에서 `a`의 값을 변경해도 다른 함수에 영향을 미치지 않습니다.
이는 C 프로그래밍에서 함수 내 지역 변수의 스코프가 해당 함수 내로 제한된다는 중요한 개념을 설명합니다.
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 13) 전역 변수의 사용 (0) | 2024.08.30 |
---|---|
chapter 13) 레지스터 변수를 반복문에 사용한 예 (0) | 2024.08.29 |
chapter 13) auto 지역 변수와 static 지역 변수의 비교 (0) | 2024.08.27 |
chapter 13) 블록 안에 지역 변수를 사용하여 두 변수를 교환하는 프로그램 (0) | 2024.08.26 |
chapter 12) 직접 구현하는 gets() 함수 (0) | 2024.08.25 |