LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【C++】参照

f:id:AtsuyaKoike:20190524095847p:plain:w300

参照(reference)

  • すべての面で変数の別名として動作する暗黙的なポインタ(implict pointer)

用途

  1. 参照を関数に渡すことができる
  2. 関数から参照を返すことができる
  3. 独立した参照を作成することができる

study127_1.cpp

#include <iostream>
using namespace std;

void f( int *n );

int main() {
    int i = 0;

    f(&i);

    cout << "iの新しい値:" << i << "\n";

    return 0;
}

void f( int *n ) {
    *n = 100;
}

Cの場合。 これは、f()がiのアドレスを引き渡していて、そのアドレスのところに100を代入しているので、iの値が変わる。



study127_2.cpp

#include <iostream>
using namespace std;

void f( int &n );

int main() {
    int i = 0;
    f(i);
    
    cout << "iの新しい値:" << i << "\n";

    return 0;
}

void f( int &n ) {
    n = 100;
}

C++ではこのように完結に書くことができる。

study129.cpp

#include <iostream>
using namespace std;

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

int main() {
    int i, j;

    i = 10;
    j = 19;

    cout << "i:" << i << "、";
    cout << "j:" << j << "\n";

    swapargs( i, j );

    cout << "交換後:";
    cout << "i:" << i << "、";
    cout << "j:" << j << "\n";

    return 0;
}

// 参照の場合
void swapargs( int &x, int &y ) {
    int t;

    t = x;
    x = y;
    y = t;
}

// ポインタの場合
/*void swapargs( int *x, int *y ) {
    int t;

    t = *x;
    *x = *y;
    *y = t;
}*/




引用・参考はこちら

f:id:AtsuyaKoike:20190524100759j:plain:w200
独習C++ 第4版 https://www.amazon.co.jp/dp/4798119768