-
const 참조자Coding/Tip !! 2018. 9. 17. 18:53
& 연산자는 변수의 주소값을 반환한다
우리가 pointer를 공부할 때 한번쯤은 보게되는 &이다.
&는 참조자선언을 의미한다.
변수의 주소값을 반환하려면 할당된 메모리 공간이 필요하고 그렇기 때문에 이는 상수가 아닌 변수에 사용된다.
<기본 사용법>
12345678#include <stdio.h>int main(){int num = 7;int *pointer = #int &refer = num;return 0;}<잘못된 사용법>
int &refer = 7; -> 참조자는 이미 선언된 할당된 메모리를 가진 변수를 대상으로 사용이 가능함, 변수가 아닌 상수를 참조했음으로 잘못됨
int &refer; -> 아무것도 참조하는 대상이 없음
int &refer = NULL; -> NULL을 참조함으로 에러임
하지만 예외의 경우가 있다.
const 참조자는 리터럴 상수를 참조할 수 있다.
123456789101112#include <stdio.h>int func(const int &num1, const int &num2){return num1;}int main(){func(1,2);return 0;}이러한 코드가 있다고 할 때, const 참조자를 사용한다면 1, 2의 주소를 참조하는 것이 아니라
1, 2가 저장되는 임시적인 변수의 주소를 참조하게 되는 것이다.
const 참조자가 이러한 리터럴 상수를 참조하지 못하게 되면
12345678910111213#include <stdio.h>int func(const int &num1, const int &num2){return num1;}int main(){int num1=1;int num2=2;func(num1, num2);return 0;}이런식으로 상수를 변수에 넣고 그 변수를 이용하여 함수를 사용하여야 한다.
이것보다 편리하게 사용할 수 있게 하기위해 const가 리터럴 상수를 참조할 수 있는 것이다.
의문점
int b= 10;Int *a=&b;포인터 a가 b의 주소를 가리킴--------------------------------Int d=10;Int &c=d;c는 변수d의 메모리공간을 참조함-> 여기서 *a나 c는 같은의미로 해석해되 되는가??결론 : 포인터는 물리적으로 사용자가 해당 주소를 정해주지만 래퍼런스 &의 경우는 컴파일러가 알아서 주소를 매핑해줌그 차이를 제외하고는 같은 의미로 해석해도 좋다고 보여짐c++은 보통 포인터보다는 래퍼런스를 사용하는 것을 추천한다고 한다. (thanks to umbum^^)@ const 변수는 생성시 초기화해주지 않으면 에러가 발생함12345678#include <iostream>using namespace std;int main(){const int a; (x) -> 에러발생const int a = 1; (0) -> 선언과 동시에 초기화해아함}반응형'Coding > Tip !!' 카테고리의 다른 글
::연산자와 . 연산자 (0) 2018.09.19 static 변수 (0) 2018.09.18 댕글링 포인터 ( Dangling Pointer) (0) 2018.09.17 strcmp와 strncmp (0) 2018.08.20 C++ 클래스에서 다른클래스를 함수의 인자로 사용할 때 (0) 2018.04.14 댓글