참조자 형식 (Reference(주소) 형식)
C에는 없는 형식으로 포인터와 구조상 동일.
사용법
반드시 선언과 동시에 변수로 초기화 해야한다.
int &변수명 = 참조할변수;
포인터와 비교
//포인터
int * ptr = a;
*ptr = 10;
//참조자형식
int &rData = a; //변수를 참조한다고 해서 참조자 형식인 것.
rData = 10; //참조한 변수와 동일한 변수라고 생각하고 사용하면 된다.
//포인터와는 달리 * 연산자를 사용하지 않는다.
- 처음 어떤 변수와 짝을 이루게 되면 그 짝이 달라지지 않는다.
- 겉으로 보기에는 전혀 포인터로 보이지 않는다. (값을 변경할 때 일반 변수처럼 사용하기 때문에)
- 가능하다면 가급적 포인터 대신 참조 형식을 사용하기.
매개변수가 참조 형식으로 되어있는 경우
#include <iostream>
using namespace std;
void TestFunc(int &rParam){
rParam = 100; //변수만 봐서 참조 형식인지 모른다는 것이 문제점이다. (변수만보고 형식 확신하지말기)
//이렇게 연산하면 main의 변수값이 변경된다.
}
int _tmain(int argc, _TCHAR * argv[]){
int nData = 0;
TestFunc(nData); //매개변수가 참조형식이므로 &nData로 기술하면 컴파일오류!!!!
cout << nData << endl; //100이 출력된다.
return 0;
}
포인터 전형적인 예제 swap 함수를 참조 형식으로 구현
//포인터로 구현
void Swap(int *a, int *b){
int nTmp = *a;
*a = *b;
*b = nTmp;
}
int main(){
int x = 10, y = 20;
Swap(&x, &y);
cout << "x: " << x <<endl;
cout << "y: " << y <<endl;
}
//참조자형식으로 구현
void Swap(int &a, int &b){
int nTmp = a;
a = b; //포인터와 달리 변수 앞에 *를 사용하지 않는 다는 점 주목
b = nTmp;
}
int main(){
int x = 10, y = 20;
Swap(x,y); //포인터와 달리 인자 앞에 &를 사용하지 않는 다는 점 주목
cout << "x: " << x <<endl;
cout << "y: " << y <<endl;
return 0;
}
'◼️C++' 카테고리의 다른 글
[C++] 소숫점 아랫자리 버리기. 정확하지 않은 실수 연산 해결하기 (0) | 2023.09.04 |
---|---|
[C++] 범위 기반 for 문 for(auto n : nList) (0) | 2023.08.31 |
[C++] 메모리 동적 할당. new(), delete() (0) | 2023.08.31 |
[C++] auto 자료형 (0) | 2023.08.31 |
[C++] 변수 선언 및 정의 (0) | 2023.08.31 |