포인터
type * p;
레퍼런스
type &r = 기억공간이름(변수명) // 기억공간을 공유
// 반드시 선언과 동시에 초기화!!!!
사용시 주의점
선언과 동시에 초기화
int n=20, m=20;
int &ref = n;
ref = m // 변경이 불가능하다, 상수화 된다.
int &ref; // 초기화가 되지 않았다.
상수로 초기화하면 컴파일오류
int &ref = 10; // 기억공간(변수명)
레퍼런스의 장점
이전에는 포인터를 이용하여 스왑을 하였지만....
void swap(int &rx, int &ry);
void main(){
f() = 30; // f() = 30 - > 이것은 a = 30 과 같은 말이다.
cout<<a;
}
하지만
// int a= 10;
int & f() {
int a= 20; // 지역변수라서 불가능하다.
return a;
}
이것은 지역변수를 사용하기 때문에 불가능하다.
type * p;
레퍼런스
type &r = 기억공간이름(변수명) // 기억공간을 공유
// 반드시 선언과 동시에 초기화!!!!
사용시 주의점
선언과 동시에 초기화
int n=20, m=20;
int &ref = n;
ref = m // 변경이 불가능하다, 상수화 된다.
int &ref; // 초기화가 되지 않았다.
상수로 초기화하면 컴파일오류
int &ref = 10; // 기억공간(변수명)
레퍼런스의 장점
이전에는 포인터를 이용하여 스왑을 하였지만....
void swap(int &rx, int &ry);
int main()
{
int a = 100, b = 200;
cout << "swap() 호출전: a = " << a << ", b = " << b << endl;
swap(a, b);
cout << "swap() 호출후: a = " << a << ", b = " << b << endl;
return 0;
}
void swap(int &rx, int &ry) // 스왑사용시 포인터를 이용하지않고
{ // 레퍼런스를 사용하여 바꾸어준다
int tmp;
cout << "In swap() : rx = " << rx << ", ry = " << ry << endl;
tmp = rx; rx = ry; ry = tmp;
cout << "In swap() : rx = " << rx << ", ry = " << ry << endl;
}
함수 인자 전달방식
1. pass by value: 실인자 - > 형식인자로 복사됨
2. pass by address 실인자(주소) 전달 -> 형식인자는 포인터변수
3. pass by reference 실인자(변수명만) - > 형식인자는 레퍼런스 변수
실인자와 형식인자는 기억공간을 공유한다.
-> 많은 리턴값을 받아오는데 2,3번이 유용하다.
레퍼런스를 반환값으로 가능한가??
int a= 10;
int & f() { // f() 는 a의 레퍼런스이다.
a= 20; // f() 는 a의 값을 참조한다.
return a;
}1. pass by value: 실인자 - > 형식인자로 복사됨
2. pass by address 실인자(주소) 전달 -> 형식인자는 포인터변수
3. pass by reference 실인자(변수명만) - > 형식인자는 레퍼런스 변수
실인자와 형식인자는 기억공간을 공유한다.
-> 많은 리턴값을 받아오는데 2,3번이 유용하다.
레퍼런스를 반환값으로 가능한가??
int a= 10;
int & f() { // f() 는 a의 레퍼런스이다.
a= 20; // f() 는 a의 값을 참조한다.
return a;
void main(){
f() = 30; // f() = 30 - > 이것은 a = 30 과 같은 말이다.
cout<<a;
}
하지만
// int a= 10;
int & f() {
int a= 20; // 지역변수라서 불가능하다.
return a;
}
이것은 지역변수를 사용하기 때문에 불가능하다.