본문 바로가기

Language & Technique/기술(technique)

참조자(레퍼런스)와 포인터

참조자(Reference, 레퍼런스)

  • 변수라고 하는 것은 할당된 메모리 공간에 붙여진 이름이다. 이름을 사용하면 해당 메모리 공간에 접근이 가능해진다. 
  • 참조자는 이러한 변수에 다른 이름을 붙이는 것을 말한다.
  • 대상이 이름이 존재하지 않을 경우에는 참조할 수 없다.

 

선언 방법

int num = 1;
int& ref1 = num; // 참조자 선언
int& ref2; // Compile Error: 초기화 필요

 

 

포인터

  • 포인터는 변수의 주소를 저장하는 변수이며 포인터, 포인터 변수 다 같은 의미로 쓰인다.
  • 주소만을 저장할 수 있는 변수를 포인터 변수라고 하고 일반적인 변수 선언과는 다르게 자료형에 * 표시를 붙여 선언한다. 
  • 포인터가 가리키는 값을 가져오는 것을 역참조라고 한다.

 

선언 방법

int n = 100;   // 변수의 선언
int *ptr = &n; // 포인터의 선언
nt **pptr = &ptr; // 포인터의 참조
printf("%d/n", *ptr); // 포인터의 역참조

 

출처 : www.tcpschool.com

 

출처 : www.tcpschool.com

 

 

&(레퍼런스)와 *(포인터)의 차이

1. 포인터는 NULL을 허용하지만 레퍼런스는 NULL이 허용되지 않는다. 

포인터를 다룰 때 마주칠 수 있는 ‘Null pointer exception’ 또는 ‘Segmentation Fault’ 에러들의 대부분의 원인은 포인터를 초기화하지 않거나 NULL을 가리키고 있는 포인터에 접근했을 때 발생한다.

 

포인터 변수를 사용할 때에는 포인터가 NULL인지 여부를 확인하는 코드(validation)로 처리하여 에러를 예방해야 한다.

if (ptr != NULL) 
	printf("%d\n", &ptr);
else 
	printf("ptr is null\n");

 

2. 포인터는 참조 대상에 대해 & 연산을 통해 주소 값을 할당하고, 레퍼런스는 참조 대상을 그대로 할당한다.

int a = 10; 
int *p = &a; // 포인터는 주소값을 할당
int &r = a; // 레퍼런스는 대상을 직접 할당

레퍼런스는 선언과 동시에 초기화를 하지 않으면 컴파일 오류 발생한다.

포인터는 넘겨받은 참조를 사용할 때에도 *, -> 등의 포인터 연산자를 통해 접근해야 하지만 레퍼런스는 마치 일반 변수처럼 접근할 수 있다.

(다만 레퍼런스의 값을 변경하면 레퍼런스가 참조하고 있는 실제 변수의 값이 변경된다.)

 

3. 포인터는 메모리 공간을 소모한다.

포인터는 주소 값을 저장하기 위해 별도의 메모리 공간을 소모하지만, 레퍼런스는 같은 메모리 공간을 참조하므로 메모리 공간을 소모하지 않는다.

 

 

 

 


 

 

http://www.tcpschool.com/cpp/cpp_arrayPointer_pointerIntro

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

https://woo-dev.tistory.com/43

 

[C++] 포인터와 레퍼런스(참조)의 차이를 이해해보자

C++에는 포인터(Pointer)와 레퍼런스(Reference)라는 개념이 있다. 포인터는 C 에도 있었던 개념이며 레퍼런스는 C++ 에서 등장한 개념이다. 언뜻 보면 용도가 비슷한데 정확히 어떤 차이점이 있는지,

woo-dev.tistory.com

https://gracefulprograming.tistory.com/11

 

[C++] 포인터(Pointer)와 레퍼런스(Reference : 참조자)의 차이

안녕하세요 피터입니다. 오늘은 C언어를 배운 후 C++을 공부하는데 있어서 굉장히 헷갈리는 개념인 포인터와 레퍼런스의 차이에 대해서 설명드리겠습니다. 개요 C++ 프로그래밍을 시작하면 레퍼

gracefulprograming.tistory.com

https://ssinyoung.tistory.com/16

 

12. [C / C++] 포인터와 레퍼런스의 차이

1. 포인터 (pointer) 포인터는 메모리의 주소를 가지고 있는 변수이다. 주소 값을 통한 메모리 접근을 한다. (간접 참조) 2. 레퍼런스 (reference) 레퍼런스 = 참조자. ( C++ 문법 ) 참조자는 자신이 참조하

ssinyoung.tistory.com

 

'Language & Technique > 기술(technique)' 카테고리의 다른 글

[자료구조] Pair 와 Map  (0) 2022.10.01
DFS - 조합과 순열  (0) 2022.08.15
그래프 - DFS 와 BFS  (2) 2022.03.14