1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <iostream> using namespace std; int main() { int num1 = 1020; // 변수 선언 int &num2 = num1; // 참조자 선언 num2 = 3047; cout << "Val: " << num1 << endl; // 3047 cout << "Ref: " << num2 << endl; // 3047 cout << "Val: " << &num1 << endl; cout << "Ref: " << &num2 << endl; // &num1 과 &num2의 값은 같다 int &num3 = num2; // 참조자를 대상으로 참조자 선언 cout << "num2: " << num2 << endl; cout << "num3: " << num3 << endl; // int &ref = 20; // 참조자는 변수에 대해서만 선언 가능 // int %ref; // 참조자는 미리 선언했다가 후에 참조 불가, 참조 대상 변경 불가 // int &ref = NULL; // NULL로 초기화 불가 int num = 12; int *ptr = # int **dptr = &ptr; int &ref = num; // 변수 참조 int *(&pref) = ptr; // 포인터 변수 참조 int **(&dpref) = dptr; // 더블 포인터 변수 참조 cout << ref << endl; cout << *pref << endl; cout << **dpref << endl; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <iostream> using namespace std; // Call-by-value 함수 // 주소 값을 이용해 함수의 외부에 선언된 변수에 접근하는 형태가 아님 int* SimpleFunc(int *ptr) { return ptr + 1; } // Call-by-reference void SwapByRef(int &ref1, int &ref2) { int temp = ref1; ref1 = ref2; ref2 = temp; } // const로 참조자를 선언시, 참조자 ref를 통한 값의 변경을 허용하지 않음 void HappyFunc(const int &ref) { } // 반환형이 참조형 int& RefRetFuncOne(int &ref) { ref++; return ref; } // 반환형이 값 int RefRetFuncTwo(int &ref) { ref++; return ref; } // 지역 변수를 참조형으로 반환하면 안된다. int& RefRetFuncThree(int n) { int num = 20; num += n; return num; } int main() { int val1 = 10; int val2 = 20; SwapByRef(val1, val2); cout << "val1: " << val1 << endl; cout << "val2: " << val2 << endl; // 반환형이 참조형인 경우, 반환 값을 무엇으로 저장하느냐에 따라 결과에 차이가 있다. int num1 = 1; int &num2 = RefRetFuncOne(num1); // 참조형으로 반환된 값을 참조자에 저장 int num3 = RefRetFuncOne(num1); // 참조형으로 반환된 값을 변수에 저장 num1++; num2++; num3++; cout << "num1: " << num1 << endl; cout << "num2: " << num2 << endl; cout << "num3: " << num3 << endl; // 반환형이 값인 경우, 값이 반환되므로 반드시 변수에 저장해야 한다. int num4 = 1; int num5 = RefRetFuncTwo(num4); num4 += 50; num5 += 100; cout << "num4: " << num4 << endl; cout << "num5: " << num5 << endl; // int &num6 = RefRetFuncTwo(num4); // 에러 int &num7 = RefRetFuncThree(10); // 지역 변수는 소멸되므로 참조형으로 반환하면 안된다. cout << "num7: " << num7 << endl; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream> using namespace std; int Adder(const int &num1, const int &num2) { return num1 + num2; } int main() { const int num = 20; // int &ref = num; // 에러 참조 불가 const int &ref = num; // 상수화된 변수에 대한 참조자 선언 const int &ref2 = 50; // 상수 참조 가능, 임시 변수 상수화 cout << Adder(3, 4) << endl; // const의 상수 참조 } | cs |