IT 관련자료/C++

참조에의한 인수전달

elkein 2022. 2. 18. 13:01
========================기본개념==================

void addOne(int &y)
{
    //참조에 의한 호출, 주소가 모두 같다..!
    cout << y << " " << &y << endl;
    y += 1;

}

------------------------------메인함수부분

   int x = 5;
    cout << x << " " << &x << endl;

    //여기서는 x라는 변수 자체가 들어간것과 동일
    addOne(x);

    cout << x << " " << &x << endl; //여기 출력값하고 위에 함수출력값하고 주소가 같음



==============레퍼런스인수 주의사항=======================================

void foo1(int*& ptr) //여기서 &는 레퍼런스. (int *) &ptr이렇게 봐도 무방
{
    //ptr 자체의 주소값 //ptr주소의 주소값
    cout << ptr << "  " << &ptr << endl;
}

void foo(const int& x)
{
    cout << x << endl;
}

------------------------메인함수 부분
    int x1 = 5;
    int *ptr = &x1;
    foo1(ptr);



    //foo(6); foo에서 입력값이 int &x인데, 6자체가 변수가 아니라 주소값이 없어서 안됨.
    //그래서 이럴떄는 그냥 변수에 대입해서 넣어주거나, foo함수에 const int&x라고 선언
    //단 이렇게 할 경우 함수 내부에서 x값을 변형시키면 안됨 그냥 입력값으로만 써야함.


리턴타입 두개 받고 싶을 때==============================================

//함수에서 return해 주는 값이 하나밖에 없으니까 리턴값을 두개이상 쓰고 싶을 때 이렇게 구현
//const double은 입력값으로만 받는구나~
//double&는 레퍼런스 값이니까 출력값으로 쓰겠구나... 하고 생각
//double&에 들어갈 값들은 임의값 초기화 후 레퍼런스 변수를 변환시켜줌
void getSinCos(const double degrees, double& sin_out, double& cos_out)
{
    static const double pi = 3.141592;
    const double radians = degrees * pi / 180.0;
    sin_out = std::sin(radians);
    cos_out = std::cos(radians);
}

메인함수부분------------------------------

    double sin(0.0);
    double cos(0.0);

    getSinCos(30.0, sin, cos);

    cout << sin << " " << cos << endl;
    
===========================================================