본문 바로가기
Programming/C++

[c++] Reference, call

by OKOK 2017. 5. 14.

#include <iostream>

using namespace  std;


void SwapByRef2(int &ref1, int &ref2)

{

int temp = ref1;

ref1 = ref2;

ref2 = temp;

}


int main(void)

{

int val1 = 10;

int val2 = 20;


SwapByRef2(val1, val2);

cout << "val1: " << val1 << endl;

cout << "val2: " << val2 << endl;

return 0;

}



1. 함수 외부에 선언된 변수의 접근 방법 2가지 주소값을 이용한, 참조자를 이용한 호출

2. 참조자는 선언과 동시에 변수로 초기화해야 한다.

3. 참조자 연산자를 통해서 call by reference 구현한 예제


1. 함수 내에서, 참조자를 통한 값의 변경을 진행하지 않을 경우, 참조자를 const로 선언해서, 함수의 원형만 봐도 값이 변경이 이뤄지지 않음을 알 수 있게 한다. (함수의 원형을 보고 어떤 함수인지 어떤 특성을 가진 함수인지 대략적인 감이 잡혀야 한다)


#include <iostream>

using namespace  std;


int& RefRetFuncOne(int &ref)

{

ref++;

return ref;

}


int main(void)

{

int num1 = 1;

int &num2 = RefRetFuncOne(num1);


num1++;

num2++;

cout << "num1: " << num1 << endl;

cout << "num2: " << num2 << endl;

return 0;



1. 함수 반환형이 &로 가능하네. 신기하다.

2. 이 함수에서는 참조자 형태로 반횐되므로 다시금 num1 에 대해서 num2 라는 별칭을 가지게 된다.

3. 원래 1 이 함수에 들어가서 1 이되고 각각 num1++, num2++ 에 의해 4가 되어 나오는 것이다.

4. 결과적으로 ref, num1, num2 는 같은 데이터의 이름이다.

5. 함수의 매개변수는 함수가 소멸되면 그 안의 변수 또한 소멸된다.

 


#include <iostream>

using namespace  std;


int& RefRetFuncOne(int &ref)

{

ref++;

return ref;

}


int main(void)

{

int num1 = 1;

int num2 = RefRetFuncOne(num1);


num1 += 1;

num2 += 100;

cout << "num1: " << num1 << endl;

cout << "num2: " << num2 << endl;

return 0;

}

1. 위의 예제와 차이점은 함수를 호출할때 &을 넣었나 안넣었나 차이이다.

2. 이번예제를 통해서 반환형이 참조자이어도 일반변수를 선언해서 반환 값을 저장할 수 있음을 알 수 있다.

3. 이 말은 즉슨, 새로운 변수를 새로이 생성하겠다는 뜻이다. 값은 그대로 복사하고...

4. 그래서 그 이후의 같은 값을 가진 다른 변수가 다른 연산에 다른 결과값을 보인다.


#include <iostream>

using namespace  std;


int RefRetFuncTwo(int &ref)

{

ref++;

return ref;

}


int main(void)

{

int num1 = 1;

int num2 = RefRetFuncTwo(num1);


num1 += 1;

num2 += 100;

cout << "num1: " << num1 << endl;

cout << "num2: " << num2 << endl;

return 0;

}


1. 단순하게 참조자와 변수의 차이를 알면 되겠다.

2. int 형으로 반환하면 변수 값을 반환한다고 알면 되겠다.

3. 기존에 int& 이라면 그 별칭을 사용하겠다는 것 같다... 그 이름을 사용한다는 것은 주소값 호출이랑 비슷한 개념이네. 그래서 call by reference 를 2가지로 분류한 것이구나.

4. 이것 위의 아웃풋과 동일하다. 위의 예제와 차이점은 반환형이 참조자인가 기본자료형 int 인가 차이다. 값은 변화가 없다. 


1. const 는 어디서 사용하는 것이지?

2. 아직 실제 구현 모델에서 const 를 본적이 없어 공부에 흥미가 떨어진다..