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