/**
inout parameter
함수내의 파라미터는 기본적으로 값타입이고( 복사되어 전달) 임시상수이기 때문에 변경 불가 원칙
*/
var num1 = 123
var num2 = 456
func swap(a: Int, b: Int) {
// var temp = a
// a = b // let 이라서 못바꿈
// b = temp // let 이라서 못바꿈
}
swap(a: num1, b: num2)
/**
함수 내에서 변수를 직접 수정하도록 돕는 inout키워드 (참조로 전달) - 메모리 주소를 전달
inout 키워드(선언시), & 사용(실행시)
*/
func swapNumbers(a: inout Int, b: inout Int) { // var a, var b
var temp = a
a = b
b = temp
}
num1 = 123
num2 = 456
// 메모리 주소를 전달해야하기 때문에 var 타입을 argument에 전달해야함.
swapNumbers(a: &num1, b: &num2) // let 으로 전달 불가, 값 자체를 전달 불가, 가변 파라미터도 불가능
print(num1, num2)