
안녕하세요 여러분!
오늘은 지난 시간에 배운 함수의 기본 형태에 이어서 지역&전역 변수에 대해 알아보고 값을 통한 호출, &(참조자)를 통한 호출, 재귀함수 등에 대해 배워볼거예요.
오늘부터 살짝 난이도가 있으니 집중해서 시작해봅시다!
1. 지역 변수
: 변수의 범위가 지역적인 변수를 말해요. 함수 안에서 변수를 정의해주면 해당 함수 안에서만 사용가능한 지역변수가 되는거죠. main() 함수도 함수니까 main() 함수 안에서 정의된 변수 역시 지역 변수라고 볼 수 있어요!
위에서 노란색 형관펜으로 칠한 int x는 makeDouble() 함수 내에서 정의한 변수이므로 지역변수예요. 함수 내에 할당된 값인거죠. main() 함수로 흐름이 빠져나오게 되면 main() 함수 속 int x로 바뀌는 겁니다.
따라서 03번에 10이 아닌 쓰레기값이 들어가게 되는 이유도 makeDouble() 함수 내에서 새롭게 int x를 선언하고 아무 값도 할당해주지 않았기에 해당 값이 출력된거예요.
2. 전역 변수
: 변수의 범위가 전역적인 변수를 뜻합니다. 어떤 함수 내에서 선언된 것이 아니라 함수밖에서 선언되어 프로그램 동작과 함께 생성되고 프로그램이 끝날 때 소멸됩니다. 즉 프로그램이 실행되는 동안 계속 존재하는 것이죠.
위 식에서 노란색으로 칠한 int x는 광역변수이고 초록색으로 칠한 int x는 지역변수예요. 그래서 아까와 마찬가지로 03에는 지역변수로 선언만 하고 값은 지정해주지 않은 초록색의 int x값이 쓰레기값으로 출력되게 되는거죠!
3. Pass by value/ Pass by reference
pass by value 는 값을 복사해서 전달하는 형태입니다. 반면 pass by reference는 참조 변수를 통해 값을 전달하는 형태인데 이는 다른 변수 x의 별명처럼 사용되는 것으로 같은 변수(메모리)처럼 사용되어요. 때문에 해당 함수의 실행이 끝나도 참조 변수를 통해 전달한 값은 여전히 그대로 남아있게 됩니다. 별명은 사라져도 값은 남아있게 되는거죠. 따라서 함수 실행이 끝나고도 값을 유지하고 싶으면 pass by reference를 사용해야 해요!
다음 예시를 통해 pass by value와 pass by reference의 차이를 확인해보도록 해요.
(1) pass by value
swap() 함수는 입력 파라미터로 받은 값 a, b를 바꿔주는 기능을 하는 함수예요. 그런데 위 함수 실행 결과에서 알 수 있든 var1 값과 var2 값이 바뀌지 않고 그대로인 것을 확인할 수 있어요. 이는 swap() 함수 실행이 끝나면 a, b 변수가 사라지면서 바뀌었던 것도 원상복귀되는 효과가 생기는거예요.
그렇다면 두 변수의 값이 바뀐채로 그대로 main() 함수 실행을 하려면 어떻게 해야할까요?
바로 reference를 통해 값을 전달해주면 됩니다.
(2) pass by reference
위 함수에선 입력 파라미터로 참조 변수를 받고 있어요. 이는 var1 과 var2의 별명으로 a, b를 상정하겠다는 뜻이에요. 그래서 아래 그림처럼 메모리 공간에서 var1과 var2 가 있는 공간에 그대로 a, b가 함께 들어있다가 swap() 함수 실행이 끝나면 별칭이었던 a, b 는 함께 사라지고 대신 값 val1, val2는 그대로 남아있는거죠. 그래서 메인함수 실행 결괏값처럼 val1과 val2의 값이 바뀌어 있는 것을 확인할 수 있습니다.
4. Recursion (재귀호출)
: 재귀호출은 나 자신을 부르는 것으로 재귀 호출 함수와 같은 경우 함수 내에서 자기 자신 함수를 부르는 것입니다.
대표적으로 factorial 함수를 예시로 들 수 있는데 계속해서 1부터 n번째 수까지 곱하는 factorial 함수는 재귀호출로 구현할 수 있습니다.
다음 factorial() 함수 코드를 살펴볼까요?
int factorial (int n) {
if ( n == 0)
return 1;
else
return n * factorial(n - 1);
}
재귀호출 함수를 응용하여 실생활에서의 다양한 상황을 구현해볼 수 있을거예요!
오늘도 고생 많았고 다음 시간에는 조건문, 반복문 등을 본격적으로 공부해보는 시간을 가져보도록 할겁니다
다음 시간에 만나요 꿀

'C , C++ 스터디' 카테고리의 다른 글
3. C++ 조건/반복문 (if-else문, while문) (0) | 2024.10.02 |
---|---|
3. C++ 조건/반복문 (do-while문, for문, switch-case문) (1) | 2024.10.02 |
2. C++함수(Function) -1 (0) | 2024.10.01 |
1. C++ 언어의 기본 개념( 식별자, 변수, 고정 변수, 입출력, 연산자) (2) | 2024.10.01 |
C언어로 랜덤 숫자 뽑기 게임 만들기 (1) | 2023.08.28 |