参照の値渡し
「参照の値渡し」というか、「参照を値渡し」(する)って感じ
要するに
値渡しなので、関数内で仮引数を変更しても、実引数は変更されていない
しかし、その実引数はポインタなので、結局は変更されたように見える
例えば、配列などを渡した場合がわかりやすい
以下のような配列を作った場合、arrが指すメモリの番地は、配列の中身の先頭要素が入っているポインタになる
memoryメモリの番地 | 中身 | . |
0x9816 | 10 | `arr[0]` |
0x9820 | 20 | `arr[1]` |
... | ... | ... |
0x9840 | 0x9816 | arr |
ここで、変数 arr
を実引数として関数に入れた時を考えると、
exampledef changeArr(array):
array[0]=100
この関数を呼び出した時、「参照」を「値渡し」することになる
examplechangeArr(arr) // 値渡しで実引数に`0x9816`が`コピー`される
関数 changeArr
内では実引数 0x9816
の先頭要素を「100」に変更するので、結果的に変数 arr
の先頭要素を変更したように見える
多くの場合「参照」は「ポインタ」を指すが、そうでない実装もあるらしい
つまり、ポインタでない何かを参照してる時は、「参照」 != 「ポインタ」
nullチェックをすること
ヌルポインタを踏むとクラッシュする
参考