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 |