카테고리 없음

referernce and pointer (c, c++)

bigbigbug 2021. 7. 26. 15:02

참조자와 포인터 참 헷갈립니다.

 

#include <stdio.h>

/*
int *p; 포인터선언
int &r; 참조자(reference)선언

*p=10; 값
&r=p; 주소
*r=10; 오류
*/
int main(void) {

int num_1 = 111;
int *p = &num_1;

int &ref0 = num_1; //reference! (another name)
int &ref1 = *p;
int *(&ref2) = p;


printf("%d\n", ref0); //num_1의 값
printf("%d\n", &ref0); //ref0의 주소 값(참조자)

printf("%d\n", &ref1); //ref1의 주소 값(참조자)
printf("%d\n", ref1); //ref1의 값(참조자) == num_1
printf("%d\n", ref2); //ref2가 가르키는 주소 값(참조 포인터)
printf("%d\n", p); //p가 가르키는 주소 값
printf("%d\n", &num_1); //num_1의 주소 값
printf("%d\n", &ref2); //ref2의 주소 값

printf("%d\n", *ref2); //ref2(포인터)가 가르키는  참조 ==num_1


return 0;
}

출력

111
-855517436
-855517436
111
-855517436
-855517436
-855517436
-855517432

111

 

ref : https://hwan-shell.tistory.com/38

 

 

C++ this 포인터?? 그럼 *this 는 뭐지?

※ *this에 대한 설명은 맨 아래에 설명하고 있습니다. 맨 아래만 보면 이해가 잘 가지 않을테니 처음부터 차근차근 읽어주시기 바랍니다.^^ 또한 설명 중 C++의 '참조자'와 포인터의 '값의 참조' 부

hwan-shell.tistory.com

 

1. 참조자(&)는 또다른 이름으로 사용되면 function으로 넘길때 이변수를 사용하면 function에서 값을 변경하는 것이 가능

2. 아래의 두가지 선언은 같은 의미를 가짐

int &ref0 = num_1; //reference! (another name) ->ref0는 참조자인데 num_1의 참조자
int &ref1 = *p; -> ref1은 참조자 인데 *p (p포인터가 가리키는 곳의 주소에 있는 값(num_1의 참조자)

 

3.

int *(&ref2) = p; -> ref2는 참조자인데 이를 포인터(새로운 공간을 확보하고 이를 포인터로 사용)값. p값(주소)를 복사. 즉 새로운 메모리가 잡히는데 따라가서 그곳에 저장된값은 참조값이다.

4.

*ref2 -> 포인터의 값은 참조자 즉 num_1의 참조자 임으로 111이 나옴