함수 인자 전달 방식을 3가지로 나눌 수 있다.
Call by value, Call by reference, Call by address이다.
매개변수를 받아 위치를 바꾸는 Swap 메서드를 만들어 보자.
void Swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
실행은 Swap(a, b)로 한다
Swap에 int a, b : 1, 3을 넣은 다음 a b를 출력하면 3 1 이 출력될까? 아니다.
현재의 Swap 메서드는 들어온 값을 복사해 사용한다.
복사된 x와 y가 바뀐 것이기 때문에
이것이 바로 call by value, 값복사이다.

그렇다면 Call by reference는 무엇인가??
바로 참조하는 것이다.
참조자 변수 &을 이용해 차이를 알아보자.
void Chamjo(int& x, int X);
내용이 있다고 치는 이런 메서드가 있다.
Chamjo(a, b)를 실행해보자.
그러면 x는 a 의 주소를 참조하며, x 의 값을 바꾸면 a 도 같이 바뀐다.
이를 call by reference라고 한다.
마지막으로 call by address를 알아보자.
call by address는 말 그대로 주소를 전달하는 것인데
매개변수로 주소를 담고 있는, 포인터 변수를 받아서 그 값을 사용한다.\
주소를 받는 Swap 메서드를 만들어 보자.
실행은 Swap(&a, &b)로 한다.
void Swap(int* x, int* y) {
int temp = x;
x = y;
y = temp;
}
그러면 a, b의 주소가 전달되고, 역참조 연산자인 * 를 이용해 a, b 주소에 있는 값을 이용해 x, y의 값을 바꿀 수 있게 되었다.
답부터 말하자면 배열은 call by address이다.
배열의 이름은 주소를 담는 포인터 변수이고, 배열의 특정 인덱스에 접근하는 것은
배열[인덱스] 혹은 (배열의 주소 + 인덱스)를 역참조하여도 가능하다.
int arr[1]{1,3}
arr[1] == *(arr + 1)
