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
'C │ C++ │ C# > C++' 카테고리의 다른 글
C++ Chapter 6.14 : 참조와 const (1) | 2024.01.21 |
---|---|
C++ Chapter 6.12 : 포인터와 const (1) | 2023.11.19 |
C++ Chapter 6.11 : 동적 할당 배열 (1) | 2023.11.12 |
C++ Chapter 6.10 : 메모리 동적 할당 new와 delete (0) | 2023.11.05 |
C++ Chapter 6.9 : C언어 스타일의 문자열 기호적 상수 (1) | 2023.10.29 |