現在の言語: 日本語 |
参照渡し |
参照渡し |
| 構文 | 意味 | PHPから見た機能的な類似点 |
| test(*handle) | ポインタの値渡し | PHPの値渡し |
| test(**handle) | ポインタへのポインタ渡し | PHPの参照渡し(test(&$handle)) |
void increament(int *num)
{
//ポインタが指す先の値を操作します
(*num)++;
}
int main()
{
int num = 10;
increment(&num);//11
}
void increament(int *num)
{
//Operates on the value pointed to by the pointer
(*num)++;
}
int main()
{
int num = 10;
increment(&num);//11
}
#include//for malloc void test(int **num) { //新しいメモリ領域を確保し // sonoadoresuwo 呼び出し元のnum変数に直接書き込みます *num =(int*)malloc(sizeof(int)); if(*num != NULL) { **num = 10; } } int main() { int *num = NULL;//ポインタ変数を宣言 //ポインタ変数(num)自体のアドレスを渡します test(&num);//10 }
#include//for malloc void test(int **num) { //Allocate new memory area // Write directly to the caller's num variable *num = (int*)malloc(sizeof(int)); if(*num != NULL) { **num = 10; } } int main() { int *num = NULL; //Declare pointer variable //Pass the address of the pointer variable (num) itself test(&num); //10 }
| 項目 | ポインタの値渡し(*) | ポインタへのポインタ渡し(**) |
| 目的 | データ本体の読み書き | ポインタ変数自体の書き換え |
| PHPでの相当 | $variable(値渡し) | &$variable(参照渡し) |
| 用途 | 既存データを変更します | 関数内で変数を初期化・置き換えます |
| 変数名 | メモリ上の場所 | 格納されている値 |
| $a(呼び出し元) | アドレスA | 10 |
| $b(関数内引数) | アドレスB | 10(コピー) |
function test(int $b)
{
//$bは10から11に変更されます
//しかし、$aの変数の値が変わっているわけではありません
$b++;
}
$a =10;
test($a);
function test(int $b)
{
//$b changes from 10 to 11
//However, the value of the $a variable does not change.
$b++;
}
$a = 10;
test($a);
function test(int &$b)
{
//$bは20から21に変更されます
//しかし、$aの変数の値が変わっているわけではありません
$b++;
}
$a =20;
test($a);
function test(int &$b)
{
//$b changes from 20 to 21
//However, the value of the $a variable does not change.
$b++;
}
$a = 20;
test($a);| 変数名 | メモリ上の場所 | 格納されている場所/リンク先 |
| $a(呼び出し元) | アドレスA | 10 |
| $b(関数内引数) | アドレスB | アドレスAへのリンク |
| 項目 | 値渡し($a) | 参照渡し(&$a) |
| データのコピー | 書き換え時に発生(COW) | 発生しない |
| メモリ消費 | 理論上増えますがCOWで抑制 | ほとんど増えません |
| 関数外への影響 | なし | あり(変数自体が書き換わります) |
| 速度 | 参照よりわずかに速い傾向 | 値渡しよりわずかに遅い傾向 |
| 著作権情報 |
| ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。 ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、 その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |