본문 바로가기
C │ C++ │ C#/C++

C++ Chapter 6.13 : 참조 변수

by Pokaa 2024. 1. 15.
728x90
728x90
SMALL
참조 변수 int &

 

  • 포인터보다 사용하기 편하다.
  •  별명 이라고 생각하자.
int value = 5;

int *ptr = &value; // 포인터

int &ref = value; // ❤참조❤

cout << &value << endl; 
cout << &ref << endl;  
cout << ptr << endl;
// 출력되는 값이 모두 같다.

포인터 :  int *ptr = &value; 

  • 포인터 ptr이 value 변수의 주소 값을 가짐

참조 int & ref = value; 

  • 참조 변수 ref는 value 변수의 또 다른 별명이 된다.
  •  ref 는 이제  value 가 잡고 있는 메모리를 같이 사용한다.
    ο    &ref =  value`
  • 이제  ref = 10  하면 value도 10으로 바뀐다.

참조 변수는 반드시 선언과 동시에 별명이 될 변수로 초기화가 필요되야 한다.

  • 어떤 변수의 별명이 될지 정해주어야 함.
int & ref; // ❌ 초기화를 해주어야 한다.
int & ref = 123; // ❌ 변수로 초기화가 되어야한다. 별명이 될 변수.

const int x = 9;
int & ref = x; // ❌ x는 const 상수이므로 ref가 x의 값을 바꿀 우려가 있어 상수를 참조하는건 금지됨.
const int & ref = x; // ⭕ ref도 값을 못바꾸게 const로 설정해버리면 상수인 x를 참조할 수 있다.
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int a = 1;
    int b = 9;
    
    int & ref = a;  // ref는 a의 별명이 된다.
    cout << ref << endl; // 1 출력
    
    ref = b;  // ref는 이제 b의 별명이 된다. 
    cout << ref << endl; // 9 출력
}

 

 

참조에 의한 인수 전달

 

void doSomething(int &n)
{
    n = 10;
    cout << "In doSomething " << n << endl;
}
int main()
{
    int n = 5;
    doSomething(n); // n이 10으로 바뀐다

    cout << n << endl; // 10 출력
}


n을 doSomething의 매개변수 int & n 에 넘긴다. 

이제 doSomething의 매개변수 n은 main의 n의 별명이 된다. 

따라서 doSomething의 매개변수 타입이 int & 이 아닌 그냥 int 였다면 doSomething 안에서 n = 10 해주어도 main의 n엔 변화가 없지만 참조중이기 때문에 main의 n도 10으로 값이 바뀐다.

배열 참조

 

int arr [] = {1, 2, 3, 4, 5};
int (&arr)[5] = arr;

배열을 참조하는 변수는  int $($&arr$)$[5]  이런식으로 쓴다. 배열 크기 [] 안에 꼭 써주어야 함!

728x90
300x250
LIST