質問: (適当なポインタ変数); } ``` そこに対して、 ``` int* hogeValue; Hoge(hogeValue); ``` と記述した場合、「あくまで渡された「参照するアドレス」を書き換えているだけで、実引数hogeValueのアドレスそのものが書き換わるわけではない」という認識であってますでしょうか。 一応自分でも動作を確認してはいるのですが、ポインタの挙動を完全に理解しているかといわれればまだまだな部分も多いので、認識があっているかどうかの確認として質問させていただきました。 よろしくお願いいたします。
回答: その通りです。 呼び出し側の`hogeValue`が保持する値は変化しません。 このような呼び出しはcall-by-value(値渡し)と呼ばれて、 呼び出す関数には元の変数のコピーが渡されるので、 呼び出された関数でパラメータ変数の値を変更しても 呼び出し側の変数の保持する値は変化しません。 (呼び出し側の変数の内容を変更したい場合にはポインタ(つまりポインタへのポインタ)を使うか参照を使います。) 以下は規格(Draft)からの引用 **5.2.2 Function call** 5 > > [ Note: **a function can change the values of its non-const > > parameters, but these changes cannot affect the values of the > > arguments except** where a parameter is of a reference type (8.3.2); > > if the reference is to a const-qualified type, const_cast is required > > to be used to cast away the constness in order to modify the > > argument’s value. Where a parameter is of const reference type a > > temporary object is introduced if needed (7.1.6, 2.13, 2.13.5, 8.3.4, > > 12.2). In addition, it is possible to modify the values of nonconstant objects through pointer parameters. —end note ] > > >