2020. 11. 11. 19:48ㆍc++
[c++] 참조자
변수란 무엇인가?
변수는 할당된 메모리 공간의 이름입니다. 변수의 이름을 통해 메모리 공간에 접근이 가능하죠. 변수에 대해 생각하면 메모리 공간에 이름을 여러 개 붙일 수는 없을까? 사실 이건 크게 생각해볼 필요도 없다. 왜냐하면 C언어를 어느 정도 할 줄 안다면 이것을 이미 할 줄 알기 때문이다. int num =10;과 같이 변수를 하나 선언하고 값을 넣으면 10으로 초기화된 메모리 공간에 num이라는 이름이 생깁니다. 그리고 int *ptr = #이라고 한다면 num의 주소를 포인터 ptr에 저장하게 됩니다. 이것을 참조자로 바꾸게 된다면 int &num2 = num;이 됩니다. 이 문장의 의미는 num의 '참조자'인 num2를 선언하라 라는 의미가 되고 num2는 num과 같은 메모리 공간을 가리키게 됩니다. 이것은 쉽게 생각하면 num의 별명이 생기게 된 것입니다.
참조자의 수에는 제한이 있는가?
참조자의 수에는 제한이 없습니다. 하나의 변수에 대해 여러 개의 참조자를 만들 수도 있다는 이야기이지요. 그리고 참조자를 대상으로 참조자를 만들 수도 있습니다. num의 참조자 num2를 선언하고 num2의 참조자 num3을 선언한다면 모두 같은 메모리를 가리키고 있을 것입니다. 하지만 이게 가능하다고 해서 필요하지 않는 참조자를 만드는 것은 바람직하지 않습니다.
참조자는 상수도 참조할 수 있을까?
참조자는 오직 변수만 참조가 가능합니다. 그리고 참조자는 선언과 동시에 무엇인가를 참조해야 합니다. int &num = 20;을 쓴다면 이것은 참조 자라 할 수 없습니다. 참조자는 변수에 다른 이름을 붙이는 것이기 때문에 상수를 대상으로는 참조자를 선언할 수 없고 미리 참조자를 선언했다가 후에 다른 것을 참조하는 것 또한 불가능합니다. 그리고 참조의 대상을 중간에 바꾸는 것 또한 불가능합니다.
배열은 어떻게 처리할까?
배열은 어떻게 처리하는지 궁금할 수 있는데 배열은 요소마다 참조자를 선언할 수 있다(배열이 아니라 배열 요소)그리고 포인터 '변수'도 변수이기 때문에 참조자 선언이 가능하다.
swap함수를 만들 때
swap함수를 만들 때 무엇을 매개변수로 받는가? 보통 주소 값을 매개변수로 받을 것이다. 하지만 우리가 배운 참조자가 있다면 참조자를 이용해서 swap함수를 만들 수 있다.
'c++' 카테고리의 다른 글
[c++] 기타 연산자 오버로딩 (0) | 2021.01.30 |
---|---|
[C++]이름공간 (0) | 2020.11.07 |
[C++]인라인(inline) 함수 (0) | 2020.11.05 |
[C++]매개변수 디폴트 값(Default Value) (1) | 2020.11.05 |