[C++/C] ポインタ2

### 参照
型名& 参照名 = 変数

int main() {
    
    int a = 5;
    int& rA = a;

    cout << "変数aの値は" << a << "です。\n";
    cout << "参照rAの値は" << rA << "です。\n";

    rA = 50;

    cout << "rAに50を代入しました。\n";
    cout << "参照rAの値は" << rA << "です。\n";
    cout << "変数aの値は" << a << "です。\n";
    
    cout << "参照rAのアドレスは" << &rA << "です。\n";
    cout << "変数aのアドレスは" << &a << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
変数aの値は5です。
参照rAの値は5です。
rAに50を代入しました。
参照rAの値は50です。
変数aの値は50です。
参照rAのアドレスは0xfffff784567cです。
変数aのアドレスは0xfffff784567cです。

参照rAはaと全く同じ
参照の場合は引数を変更することができる。

void swap(int& x, int& y);

int main() {
    
    int num1 = 5;
    int num2 = 10;

    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    cout << "変数num1とnum2の値を交換します。\n";

    swap(num1, num2);
    
    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    return 0; 
}

void swap(int& x, int& y){
    int tmp;

    tmp = x;
    x = y;
    y = tmp;
}

$ g++ -o sample sample.cpp && ./sample
変数num1の値は5です。
変数num2の値は10です。
変数num1とnum2の値を交換します。
変数num1の値は10です。
変数num2の値は5です。

関数の引数にポインタ、参照を使うと、呼び出し元の実引数を変更できる

### Practice
1. x, 2.×, 3.○

void add(int* num1, int* num2, int num3);

int main() {
    
    int num1, num2, num3;

    cout << "2科目分の点数を入力してください。\n";

    cin >> num1;
    cin >> num2;

    cout << "加算する点数を入力してください。\n";

    cin >> num3;

    add(&num1, &num2, num3);
    
    cout << "科目1は" << num1 << "点となりました。\n";
    cout << "科目2は" << num2 << "点となりました。\n";

    return 0; 
}

void add(int* num1, int* num2, int num3) {
    *num1 += num3;
    *num2 += num3;
}
void add(int& num1, int& num2, int num3);

int main() {
    
    int num1, num2, num3;

    cout << "2科目分の点数を入力してください。\n";

    cin >> num1;
    cin >> num2;

    cout << "加算する点数を入力してください。\n";

    cin >> num3;

    add(num1, num2, num3);
    
    cout << "科目1は" << num1 << "点となりました。\n";
    cout << "科目2は" << num2 << "点となりました。\n";

    return 0; 
}

void add(int& num1, int& num2, int num3) {
    num1 += num3;
    num2 += num3;
}