레퍼런스를 활용한 Call-By-Reference

71p
포인터를 이용한 Call-By-Reference도 가능하지만..

void swap(int *a, int *b);
//포인터를 통해 함수에 값을 전달한다.
a의 값을 변경할 때 *a라고 쓰는것도 귀찮고,
작은 조작 실수로 에러가 잘 발생한다.
가능하지만 좀 불편하다.

그래서 좀 더 안전한

레퍼런스를 이용한 Call-By-Reference를 사용

void swap(int &a, int &b);
//값을 레퍼런스로 받는다.
int main(void)
{
swap(val1, val2)
...
}

Call-By-Value는 값을 전달한다.
데이터의 복사가 발생해서 비효율적이다.
int swap(int a, int b);
인 경우에는 int값 2개를 받고 1개를 내보내지만
구조체일 경우에는 값이 커진다.

typedef struct _Account
{
    int id;
    int balance;
    char name[100];
} Account;
형태로 구조체가 선언된 상태에서..

Account ShowData(Account p) //구조체로 입력받고 구조체로 반환하려면 큰 값이 복사가 발생한다.
void ShowData(Account &p) //레퍼런스로 하면 편하기도 하고 속도도 빠르다.

레퍼런스로 리턴하는 방법
int &increment(int &val)
{
  val++;
  return val;
}
int main(void)
{
..........
 int &ref=increment(n)
........}

위 예는 main함수에서 전달받은 레퍼런스값을 반환 하는거고...
지역변수로 선언됐다면 레퍼런스로 반환할 수 없다. 80p
지역변수는 함수가 없어질 때 없어지기 때문에 레퍼런스로 반환하면 갈 길을 잃게된다.

Leave a Reply

Your email address will not be published. Required fields are marked *

 characters available

72 − = 70