値渡し

書き写してから作業


かしこい人はすでに気づいていたかもしれないけれど、引数は変数みたいに変更できちゃう。

// トリッキーに階乗を計算
int fraction(int n) {
  int fraction = 1;
  for (; 1 < n; --n) { fraction *= n; }
  return fraction;
}

でも、変更しても外の変数の値は変わらない。

これは、変数の中の値だけを渡しているから。

void substitute2(int var) {
  var = 2; // は?
}

int main() {
  int box = 0;
  substitute2(box);
  std::cout << box; // たしかみてみろ!
}

こういう挙動を 値渡し っていう。

引数に渡されるのは変数そのものじゃないので、変なコードを書かないようにね。

変数のようなものを引数に渡す方法は次の章でやるよ。

じゃあ戻り値も値が渡されているのかと思うだろうけど、こっちは戻り値が使われるところに直接代入されている。そのほうが効率いいんだってさ。