본문 바로가기

개발공부/C++

참조변수 reference variable

int main()
{
	int value = 5;
	int *ptr = nullptr;
	ptr = &value;
	int &ref = value;
    
    cout << &value << endl;
    cout << &ref << endl;
    cout << ptr << endl;
    cout << &ptr << endl;    
    
    return 0;
}
    
004FF864
004FF864
004FF864
004FF858

사람마다 다르겠지만 서로의 주소값들이 같은 지 아닌 지를 보는 것이 중요하다.

 

ref는 반드시 초기화가 되어야한다. 그리고 리터럴이 들어갈 수 없다.

int main()
{
	int x = 5;
    int &ref = x;
    
    const int y = 8;
    const int &ref = y;
 	//참조를 통해 y값을 바꿀 여지가 생기기 때문에 const키워드가 없으면 컴파일러가 거부한다.   
    return 0;
}

const관련 이슈

#include <iostream>

using namespace std;

void doSomething(int n)
{
	n = 10;
    cout << "in doSomething " << n << endl;
}

int main()
{
	int n = 5;
    cout << n << endl;
    doSomething(n);
    cout << n << endl;
    
    return 0;
}
5
in doSomething 10
5

다시 5가 나오는 이유는 인자로 함수에 들어갈 때 값이 복사되어 들어가기 때문에 전역에 있는 n은 영향을 받지 않는다.

#include <iostream>

using namespace std;

void doSomething(int &n)
{
	cout << &n << endl;
    n = 10;
    cout << "in doSomething " << n << endl;
}

int main() {
	int n = 5;
    cout << n << endl;
    cout << &n << endl;
    doSomething(n);
    cout << n << endl;
    
    return 0;
}
5
005FFB64
005FFB64
in doSomething 10
10

완전 변수자체를 인자로 넘겨준다!! 주소 자체를 복사할 필요도 없다.

포인터를 인자로 받으면 변수자체를 복사를 한번 해야한다.

하지만 요즘 프로그래밍 추세는  dosomething함수에서 n을 못 바꾸게끔 하는 코딩한다.

그래서 const int &n을 파라미터로 받게끔 한다.

'개발공부 > C++' 카테고리의 다른 글

다중포인터와 동적 다차원 배열  (0) 2019.10.22
포인터와 참조의 멤버 선택  (0) 2019.10.22
자료형에게 가명 붙여주기  (0) 2019.10.21
전역변수와 정적변수  (0) 2019.10.21
전처리기의 활용  (0) 2019.10.21