[C++]参照によるパラメータの伝達

14043 ワード

例01

#include <iostream>
#include <cmath> // sin(), cos()

using namespace std;

void addOne(int &y)
{
    cout << y << " " << &y << endl;
    y = y + 1;
}

int main()
{
    int x = 5;

    cout << x << " " << &x << endl;
    addOne(x);
    cout << x << " " << &x << endl;

    return 0;
}
5 0x61ff0c
5 0x61ff0c
6 0x61ff0c
参照転送のパラメータは、値をコピーするのではなく、値を直接転送するため、アドレスは同じです.

例02

#include <iostream>
#include <cmath> // sin(), cos()

using namespace std;

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);
}

int main()
{
    double sin(0.0);
    double cos(0.0);

    getSinCos(30.0, sin, cos);

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

    return 0;
}
0.5 0.866025

例03

#include <iostream>
#include <cmath> // sin(), cos()

using namespace std;

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

int main()
{
    foo(6); // 매개변수로 literal

    return 0;
}
参照を関数に使用する場合、パラメータに直接文字を入れる場合は、constを貼り付けるだけです.

例04

#include <iostream>
#include <cmath> // sin(), cos()

using namespace std;

typedef int *pint; // typedef를 이용한 사용자 정의 자료형

void foo(pint &ptr) // 포인터에 대한 참조(reference)
{
    cout << ptr << " " << &ptr << endl;
}

int main()
{
    int x = 5;
    pint ptr = &x;

    foo(ptr);

    return 0;
}
void foo(int *&ptr)
{
    cout << ptr << " " << &ptr << endl;
}
ポインタへの参照(reference)を送信できます.(int*) &ptrで説明するのが便利です.
または、typedefを使用してカスタム資料として表示することもできる.

例05

#include <iostream>
#include <cmath> // sin(), cos()
#include <vector>

using namespace std;

void printElement(vector<int> &arr)
// void printElement(int (&arr)[4])
{
}

int main()
{
    // int arr[]{1, 2, 3, 4};
    vector<int> arr{1, 2, 3, 4};

    printElement(arr);

    return 0;
}
vector資料型も参照できます.