俺の名はケンヤ。難事件をいくつも迷宮入りさせたニート。しかし ある時謎の組織に入社し薬を飲まされ身体が縮んで Braian になっちゃった。
そもそも値渡しとか参照渡しって何?
簡単にまとめると、、、
「値渡し(call by value)」とは変数の値をコピーする渡し方
「参照渡し(call by reference)」とは変数を共有する渡し方
え、、、(錯乱)と、とりあえず進む
値渡し: 変数の値をコピーする渡し方
let a = [1, 2, 3]
var b = a
b[0] = 100
// a[0]は100ではなく1のまま
上記のはbはaから要素をコピーして作られた、aとは別のミュータブルなArray(配列)となる。つまり aにはbの変更は反映されない
letで宣言: イミュータブル(不変)
let b = [1, 2, 3]
b[0] = 100
// コンパイルエラー
varで宣言: ミュータブル(可変)
var a = [1, 2, 3]
a[0] = 100
// [100, 2, 3]
参照渡し: 変数のメモリのadress(住所)を渡す
下記ではSwiftが参照渡しだったと仮定します。
(本来はSwiftは値渡し)
let a = [1, 2, 3]
var b = a
b[0] = 100
// a[0]は100
//(注)値渡しの場合は1のままだった
つまり参照渡しは値渡しと異なりコピーではく、adress(メモリの住所)を渡し共有しているのです。
下記はclassとstructの参照渡し、値渡しの例です。
このほかに
Swiftでポインタを使用する方法
参照の値渡し、値の参照渡し
変数の実態がメモリ領域ってどういうこと?
などもかければなーと思います。
まだまだ不束者ですので不備や修正など、ご教授のほうよろしくお願いします!!