Programming/C++

16. 참조자

KingSSSSS 2017. 12. 20. 10:01
참조자란 변수에 별명 하나 이상을 부치는 것이다
포인터가 아니다
참조자는 선언 과 동시에 초기화를 하여야 한다

int i = 100;
int &num = i;
변수 i 가 선언되면 메모리 주소 공간에 int형
4바이트 메모리 공간이 할당 되고
메모리 공간을 기억하는 변수 i 가 붙는다
참조차는 i 변수 메모리 공간에 i 라는 이름에
num 이라는 이름을 하나더 만든다


// 참조자 기본 선언 방식
int i = 100;
int &refI = i;
printf("%d \n" ,refI);

// 배열 요소 참조자 배열 이름은 참조자 못만든다
int num2 [] = {10,20};
int &ref11 = num2[0];
int &ref22 = num2[1];
printf("%d , %d \n" ,ref11);
printf("%d , %d \n" ,ref22);

// 포인터 참조자
// 배열 이름을 바로 참조자로 못만든다
int num [] = {0,1};
int *ptr1 = num;
int *(&ref) = ptr1 ;// 포인터 참조자
int **ptr2 = &ptr1;
int **(&ref1) = ptr2 ;// 포인터 참조자
printf("%d %d \n" ,ptr1[0], ptr1[1]);     // 0 1
printf("%d %d \n" ,*ptr1+0,* ptr1+1);     // 0 1
printf("%d %d \n" ,**ptr2+0,** ptr2+1);   // 0 1
printf("%d %d \n" ,ref[0],ref[1]);          // 0 1

printf("%d %d \n" ,&ptr1[0],& ptr1[1]);           
// 같은 메모리 주소
printf("%d %d \n" ,ptr1+0, ptr1+1);               
// 같은 메모리 주소
printf("%d %d \n" ,**(&ptr2)+0,**(& ptr2)+1);     
// 같은 메모리 주소
printf("%d %d \n" ,&ref[0],&ref[1]);                    

// 같은 메모리 주소