1. 문자열 중간 자르기
*Function Call by Value 는 값 복사다
: Call by Value 는 값 복사다.
void PlusFunction(int x); 의 x는 parameter(매개변수)로써 일종의 로컬변수라고 생각하면 된다.
main()함수에서 int a를 PlusFunction()함수에 매개변수로서 넘겨준다는 것의 의미는,
main()함수 안에 존재하는 a를 복사해서 PlusFunction() 함수 안에 넘겨주고,
이 복사된 a값을 x라는 매개변수를 통해 받아서, 함수 안에서 1을 증가시킨 다음 x를 출력하겠다는 것이다.
따라서 결과값은 PlusFunction(a)는 11이 되지만,
a값은 복사해서 넘겨줬으니 main() 함수 안의 int a는 여전히 10이다.
2. Pass by Reference
* 레퍼런스는 참조자, 즉 주소를 참조하는 녀석.
: 왜 이번에는 main()함수의 a값이 바뀌었을까?
사실 Function Call을 할 때 Reference를 통해 Call 한다는 것은 함수 안에서 a값을 마음대로 바꿀 수 있다는 의미이다.
여기서 reference는 x란 매개변수를 그냥 패스해 주는 것이 아니라, x의 주소를 패스해 주게 된다.
즉, main()함수에서 PlusFunction(a)를 콜 해 주었을 때,
a의 값을 그냥 복사해서 전달해 주는 것이 아니라, a를 그대로 전달해 주는 셈이다.
x는 a의 참조자일 뿐이다! 따라서 x는 a의 주소를 통해 a를 가리키게 된다.
결론적으로 a를 그대로 전달해 주는 것이나 다름없다. 여기서 x는 a이다.
출처:
https://www.youtube.com/watch?v=1-6x8r7030Y
https://www.youtube.com/watch?v=6buEm6R980o&t=139s