2012년 12월 20일 목요일

참조자와 포인터 정리



*참조자는 선언과 동시에 변수를 참조해야 한다.
int num =20;
int &ref =20;(X)
int &ref;(X)
int &ref = NULL;(X)
int &ref = num;(O)



  1. #include
  2.  
  3. using namespace std;
  4.  
  5. int& ReferenceReturn(int &ref);
  6. int IntTypeReturn(int &ref);
  7.  
  8. int IntTypeReturn(int &ref)
  9. {
  10.     ref++;
  11.     return ref;//*****함수가 반환이 되면 정작 지역변수 ref는 소멸이 된다. 따라서 지역변수를 참조형의 변수에 저장하는 일은 없어야 한다.
  12. }
  13.  
  14. int& ReferenceReturn(int &ref)
  15. {
  16.     ref++;
  17.     return ref;
  18. }
  19.  
  20. int main(void)
  21. {
  22.     int num1=1;
  23.  
  24.     //반환형이 참조형인 ReferenceReturn함수는 반환값을 다음과 같이 두가지 형태로 저장할 수 있다.
  25.     int &num2 = ReferenceReturn(num1);//num2라는 별칭이 추가된다.
  26.     //int &num2 = ref// 와 동일
  27.  
  28.     int num3 = ReferenceReturn(num1);//&num1이 가리키는 값을 저장한다.   
  29.     //int num3 = ref;// 와 동일
  30.  
  31.     int num4 = IntTypeReturn(num1);//(O)
  32.     //int &num4 = IntTypeReturn(num1);(X)반환형이 기본자료형으로 선언된 IntTypeReturn 함수의 반환 값은 반드시 변수에 저장해야 한다.
  33.     //int &num4 = 2;와 동일
  34.  
  35.     const int &num5 = IntTypeReturn(num1);//(O)
  36.     //C++ 컴파일러는 const 참조자를 이용해서 상수를 참조할때 '임시변수' 를 만든다.
  37.  

  38.     return 0;
  39. }



const int num = 10;
변수 num을 상수화!

const int *ptr1 = &val1;
포인터 ptr1을 이용해서 val1의 값을 변경할 수 없음

int *const ptr2 = &val2;
포인터 ptr2가 상수화 됨

const int *const ptr3 = &val3;
포인터 ptr3가 상수화, ptr3을 이용해서 val3의 밧을 변경할 수 없음.


const 참조자는 상수도 참조가 가능하다!!!
const int &ref = 50;

//잘못된 구문
const int num = 20;
int &ref = num;//ref를 통한 값의 변경이 가능해지므로 상수화된 변수를 참조자에 할당 할수 없다.
ref +=10;


//포인터의 사용예
int num = 12;
int *ptr = #//별칭 ptr추가
int **dptr = &ptr;//dptr에 ptr에 담긴 값을 할당

int *(&pref) = ptr;//별칭 pref 추가
int **(&dpref) = dptr;//dpref에 dptr에 담긴 값을 할당



힙에 할당된 변수? 이제 포인터를 사용하지 않아도 접근할 수있다.
int *ptr = new int;
int &ref = *ptr;
ref = 20;
cout<<*ptr<//정상출력

*윤성우 열혈 C++프로그래밍 발췌

댓글 없음:

댓글 쓰기