C, C++/codecademy

참조와 포인터

짱짱이_ 2023. 3. 16. 23:36
  • 참조

- 참조 변수는 어떤 변수의 별칭이라고 생각하면 된다. 예를 들어 Sonny를 Songqiao라고도 부르고 싶다면..

 

 

참조 연산자 &를 이용해 위와 같이 만들 수 있다.

 

- 참조에 대해 주의해야 할 사항

  1) 참조에 대해 수행하는 모든 작업은 원본에서도 발생한다.

  2) 별칭은 다른 별칭으로 변경할 수 없다.

 

 

 

 

 

 

  • 참조에 의한 전달

- 매개변수를 함수에 전달할 때 값에 의한 전달이라고 한다. 매개변수와 인수는 별개의 변수가 되며, 어느 한 쪽을 변경해도 다른 쪽이 영향을 받지 않는다. 값에 의한 전달로 정의된 함수 내부에서는 함수 외부에 선언된 변수에 접근이 불가능하다.

- 참조에 의한 전달을 참조를 사용해 함수에 매개변수를 전달하는 것이다. 이는 같은 메모리 주소를 통해 접근하는 것으로 원본과 사본이 공유된다. ( 함수의 매개변수에 인수로 전달된 변수의 원래 주소값을 저장한다.) 이를 통해 인수로 전달된 변수의 값을 함수 내에서 변경할 수 있게 된다. 즉, 참조에 의한 전달을 주소 값을 전달 받아 함수 외부에 선언된 변수에 접근하는 형태의 호출이다.

 

 

 

 

  • const를 이용한 참조 전달

 

- const 사용으로 컴파일러에게 변수가 프로그램 전체에서 유지되도록 한다. 이때 pi를 변경하려고 하면 컴파일러에서 오류가 발생한다. 이와 비슷하게

 

 

위와 같이 한다면 함수 내에서 값이 변경되면 컴파일러 오류가 발생한다. 따라서 매개변수 값을 수정하지 않는 함수를 이용할 때 

 

 

이와 같이 한다면 매개변수가 변경되지 않는다. 참조자를 이용한 값의 변경을 하지 않겠다는 의미이다.

 

값에 의한 전달을 이용할 경우 인수의 복사본을 함수의 매개변수로 만들기 때문에 계산 비용이 크다. 그렇기 때문에 const를 이용한 참조로 전달하여 계산 비용을 아낄 수 있다.

 

 

소년코딩 - C++ 08.03 - 참조로 전달 (Pass by reference) (tistory.com)

 

C++ 08.03 - 참조로 전달 (Pass by reference)

08.03 - 참조로 전달 (Pass by reference) 값으로 전달은 두 가지 한계가 있다. 첫째, 큰 구조체 또는 클래스를 함수에 전달할 때 값으로 전달은 인수의 복사본을 함수 매개 변수로 만든다. 이 경우 복사

boycoding.tistory.com

 

 

 

 

 

  • 메모리 주소

- 참조 연산자도 & 이지만 같은 표기, 다른 의미로 변수의 주소를 보여준다.

 

 

변수가 컴퓨터에서 어디에 저장되어 있는지 궁금하다면 위의 예시처럼 &를 통해 알 수 있다. 이는 다음의 주소 값을 출력해준다.

 

출력된 메모리 주소(16진수)

 

- 참조 연산자와 구분이 필요하며 다음 사항을 유의해야 한다.

  1) 선언에서 사용되는 경우 참조 연산자이다.

  2) 선언에서 사용되지 않는 경우 주소 연산자이다.

 

 

 

 

  • 포인터

- 일반 변수와 달리 포인터는 메모리 주소를 저장한다. 사용은 다음과 같이 한다.

 

 

 

*를 이용해 일반 변수가 아닌 포인터로 만들고 ptr은 포인터 이름이다.

&gum은 변수의 메모리 주소를 가리킨다.

 

다양한 포인터 변수 선언 방법

 

주소 확인 예제

 

 

 

 

 

  • 역참조

- 역참조를 이용해 변수가 가리키는 값을 가져올 수 있다. 포인터 변수 앞에 *를 사용해서 역참조를 이용한다.

 

역참조 예제

 

 

 

 

  • Null 포인터

- int* ptr; 이런식으로 포인터 변수를 선언하면 내용이 초기화되지 않는다. Null 포인터로 초기화 되지 않은 포인터는 메모리 상에 어떤 값이 포함될 수 있지만 Null 포인터는 메모리상 아무런 값을 가리키지 않는다. (잘못된 메모리로 접근되는 것을 방지할 수 있다.)

 

 

(C/C++) 포인터(Pointer) (2) 사용법과 널 포인터 : 네이버 블로그 (naver.com)

 

(C/C++) 포인터(Pointer) (2) 사용법과 널 포인터

《 포인터 변수 만들어보기 》포인터 변수는 일반 변수와 그 형태가 비슷합니다. 물론 int, double 등...

blog.naver.com