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