@@ -118,7 +118,7 @@ <h2 class="subtitle">お決まりの書き方</h2>
118118 上記のように関数呼び出しでリターン値以外のデータも取得したい時によく使われる方法だと思います。< br />
119119 他にもクロージャーとのデータのやり取りをする場合にも使われる事がありますが、ここで注目すべきは< code > $test</ code > という引数の先頭に< code > &</ code > (アンパサンド)が付いているところです。< br /> < br />
120120
121- これはC言語でもよく使われる書き方で「アドレス渡し」と呼ばれていますが、PHPは昔からC言語を部分的にリスペクトしているような傾向があるので 、これもその一つだと思っています。< br />
121+ これはC言語でもよく使われる書き方で「アドレス渡し」と呼ばれていますが、PHPは昔から他のプログラミング言語を部分的にリスペクトしているようなところがあるので 、これもその一つだと思っています。< br />
122122 PHPとC言語ではコンパイラの処理に違いがあるので、PHP側の処理では「参照渡し」と呼ぶ事にします。< br /> < br />
123123
124124 まずは「アドレス渡し」の考え方を理解しておいた方が分かり易いと思いますので以下をご覧ください。< br />
@@ -145,8 +145,6 @@ <h2 class="subtitle">「アドレス渡し」について</h2>
145145 </ blockquote >
146146
147147 Unixシステムの事をご存じでない方もおられると思いますので、同じ場所を指し示すラベルのようなものだと考えてもらった方が分かり易いかもしれません。< br /> < br />
148-
149- つまりPHPでは< code > &</ code > (アンパサンド)を使って変数の所在をラベルのようなもので管理しているのに対して、C言語では< code > &</ code > (アンパサンド)を使う事でアドレス表記が可能で、ポインタ変数を使ってそのアドレス自身を管理する事ができます。< br />
150148 </ div > < br />
151149
152150 < a id ="compare "> </ a >
@@ -201,7 +199,7 @@ <h2 class="subtitle">PHPとC言語との比較</h2>
201199}
202200 </ pre > < br />
203201 ※C言語で< code > char</ code > というのは1バイトのデータ型です。< br />
204- ※C言語で変数名の前に< code > *</ code > (アスタリスク)をつけて宣言するとポインタ変数になります。また、宣言以外のところでアスタリスクをつけるとそのアドレスが指し示す先のメモリ内容を参照できます 。< br /> < br />
202+ ※C言語で変数名の前に< code > *</ code > (アスタリスク)をつけて宣言するとポインタ変数になります。また、ロジックの中でアスタリスクをつけるとそのアドレスが指し示す先のメモリ内容を参照できます 。< br /> < br />
205203
206204 上記をフローで表すと以下のようになります。
207205 < dl >
@@ -215,14 +213,10 @@ <h2 class="subtitle">PHPとC言語との比較</h2>
215213 < div class ="menu-line "> </ div > < br />
216214
217215 以上のように、処理の流れはいずれも同じですが変数の扱い方が異なっています。< br /> < br />
218-
219- PHPでの< code > $inside</ code > 変数は関数定義のところで< code > &</ code > (アンパサンド)を付けて渡されていますが、関数内で値を設定する時は特別な記述をしているわけでもなく、普通に1が代入されています。< br />
220- これに対してC言語での< code > inside</ code > 変数は関数へ< code > outside</ code > 変数を渡す時に< code > &</ code > (アンパサンド)を付けて渡されていますが、関数内ではポインタ変数として処理されています。< br /> < br />
221-
222216 上記のサンプルソースでは変数の値が「$inside(PHP) = *inside(C言語)」となり同じ値になりますが、C言語で「*(++inside)」と書くとカウントアップされたアドレス(101番地)が指し示す先の変数(鈴木さんの家)を参照する事になるため内容が入れ替わります。< br /> < br />
223217
224- つまり、C言語での「アドレス渡し」はポインタ変数として制御できるのでその変数をカウントアップ等で更新すればアドレスを変更する事も可能で、 < code > inside</ code > 変数以外のメモリ領域も自由に読み書きできるようになります 。< br />
225- これに対してPHP上ではこのポインタ変数の代わりにラベルのようなもので管理されている関係で < code > testFunction</ code > 関数内では常に< code > $outside</ code > 変数を指し示す事になるので、ポインタ変数のように参照先を切り替える事ができません。< br />
218+ PHPでの < code > $ inside</ code > 変数は関数定義のところでC言語のように < code > & </ code > (アンパサンド)を付けて渡されていますが、関数内で値を設定する時は特別な記述をしているわけでもなく、普通に1が代入されています 。< br />
219+ そしてラベルのようなもので管理されている関係で < code > testFunction</ code > 関数内では常に< code > $outside</ code > 変数を指し示す事になるので、ポインタ変数のように参照先を切り替える事ができません。< br />
226220 </ div > < br />
227221
228222 < a id ="example "> </ a >
0 commit comments