2011. 3. 3. 15:41
레퍼런스 선언
int val =10;
int &ref = val;


포인터를 이용한 Call-By-Reference 
: 포인터를 이용해서 포인터가 가리키는 메모리 공간에 직접 접근이 가능..
[단점] 포인터는 포인터 연산만 가능하기 때문에 잘못된 메모리 접근을 할 가능성이 높다.

 #include <iostream>

using std::cout;
using std::cin;
using std::endl;

void swap(int *a, int *b)
{
 int temp=*a;
//a++; // error.
 *a=*b;
 *b=temp;
}

int main(void)
{
 int val1=10;
 int val2=20;

 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;

 swap(&val1, &val2);
 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;
 return 0;
}




레퍼런스를 이용한 Call-By-Reference
:함수내에서 외부에 존재하는 변수에 직접 접근하는 것을 허용하되, 포인터 연산을 못하게 하는 방법.
 =>레퍼런스 사용
->swap함수 내에서는 a와 b라는 이름으로 main함수 내에 선언된 변수 val1과 val2에 직접 접근이 가능하게 된다.

 #include <iostream>

using std::cout;
using std::cin;
using std::endl;

void swap(int &a, int &b)
{
 int temp=a;
 a=b;
 b=temp;
}

int main(void)
{
 int val1=10;
 int val2=20;

 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;

 swap(val1, val2);
 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;
 return 0;
}






'Language > C++' 카테고리의 다른 글

복사생성자가 호출되는 시점  (0) 2011.03.07
깊은 복사(Deep Copy) ..(const Person& p) 명시적 정의  (0) 2011.03.07
객체 포인터 배열  (0) 2011.03.04
생성자와 동적할당  (0) 2011.03.04
new / delete  (0) 2011.03.03
Posted by Triany