値渡しと参照渡しについて

関数に引数を渡す時の話
値渡しとか参照渡しとかって話はプログラマなら
多分きいたことがあるのではないかと思われる


今日はこの違いについて語る


このカテゴリでは変数の値がメモリ上にどのように確保されるかを
たびたび話しているので特に前触れなくそういう話を使わせてもらう


変数に値を格納する時、直接値を確保する、別な場所に確保して
そこを参照するの2パターンのどちらかであることが多い
C/C++の場合普通の変数とポインタ
Javaの場合プリミティブ型と参照型
みたいな感じである


さて、関数に値を渡す時の話だが
この時、変数の値をコピーしてそれを引数として与える
さて、この結果どうなるかというと
直接値を確保する場合、値がコピーされてそれが関数に渡される
その結果、値こそ一緒だが、
元の変数とは何ら関係のない新しい変数となるわけである
なのでどんなに値を変更しても元の値には影響がない
C++でクラスの変数を渡したりすると問題が起こるがそれはまた別の機会に書かせてもらうことにしよう)
一方、別な場所に確保してそこを参照する場合
前者と同様、変数の中の値をコピーして渡すため、どこを参照しているか
という情報がわたる
その結果、中の値は同じものを見ることになる
なので関数の中で値を変えたりすると元の値も変わってしまうので注意が必要である


この話題に関してはまだまだ書きたい事や、補足事項が割とあるが、
長くなるので今回はこの辺にしておこう