C++에는 참조자라는 것이 있습니다. 참조자 형식은 C언어의 포인터와 비슷한 형식을 가집니다.
상수에는 포인터를 선언할 수 없는 것처럼 참조도 선언할 수 없습니다.
#include <iostream>
using namespace std;
int main()
{
int num = 10;
int& ref = num; //참조자 선언
int* ptr = # //포인터 선언
ref = 100;
cout << num << endl;
*ptr = 1000;
cout << num << endl;
cout << "num주소 : " << &num << endl;
cout << "ref주소 : " << &ref << endl;
cout << "ptr주소 : " << &ptr << endl;
return 0;
}
결과값:
100
1000
num주소 : 0096FB08
ref주소 : 0096FB08
ptr주소 : 0096FAF0
참조자는 포인터를 쓰는 것과 비슷해 보인다. 참조자와 포인터의 차이점은 참조자는 주소가 같다는 것이다.
참조자를 사용할 때는 주의할 점이 있다.
1. 선언할 때 반드시 초기화해야 한다.
2. 참조자 배열을 선언할 수 없다.
3. 참조 변수에 대한 포인터를 만들 수 있고, 포인터를 참조하는 참조 변수를 만들 수 있다.
{
//int& ref; 에러, 선언시 초기화해야함
//ref = num;
//int& ref[10]; //배열 사용 x
int* ptr = #
int* &ref = ptr; //포인터를 참조하는 참조 변수
int** pref = &ref; //참조 변수에 대한 포인터
}
참조자를 반환할 수 있다.
#include <iostream>
using namespace std;
int& TestFunc1(int& ref)
{
ref++;
return ref;
}
int TestFunc2(int& ref)
{
ref++;
return ref;
}
int main()
{
int num1 = 10;
int num2 = TestFunc1(num1);
int& num3 = TestFunc1(num1);
int num4 = TestFunc2(num1);
//에러, 반환형이 값의 형태이면, 참조자로 받을 수 없다.
//int& num5 = TestFunc2(num1);
return 0;
}
반환형이 값의 형태이면, 참조자로 그 값을 받을 수 없다.
반환형이 참조형이면 참조자, 변수로 받을 수 있다.
'C++' 카테고리의 다른 글
[C++] 메모리 동적 할당 new와 delete 연산자 (0) | 2019.12.17 |
---|---|
[C++] 생성자와 소멸자 (0) | 2019.12.16 |
[C++] this 포인터 (0) | 2019.12.15 |
[C++] 클래스와 메소드 (0) | 2019.12.15 |
[C++] 네임스페이스(Namespace) (0) | 2019.12.14 |