[解決済み] C++で&と*で宣言された関数の引数の違いについて
質問
次のような例を入力しました。
#include <iostream>
double f(double* x, double* y)
{
std::cout << "val x: " << *x << "\n";
std::cout << "val y: " << *y << "\n";
return *x * *y;
}
double f2(double &x, double &y)
{
std::cout << "val x: " << x << "\n";
std::cout << "val y: " << y << "\n";
return x * y;
}
int main()
{
double a, b;
a = 2;
b = 3;
std::cout << f(&a, &b) << "\n";
std::cout << f2(a, b) << "\n";
return 0;
}
関数の中で
f
x と y をポインタとして宣言し、その値を取得するために
*x
. を呼び出すと
f
を呼び出すとき、渡された引数のアドレスを渡す必要があります。
&a, &b
.
f2
は定義が違うだけで同じです。
さて、私の疑問は、メモリ管理に関してはどちらも本当に同じなのでしょうか?どちらも渡された値のコピーを作成せず、代わりに参照を渡しているのでしょうか?
私は
f2
のアドレスを読み取ることができなかったからです。
x
で
f2
だから私は
知っている
でxとyについてもっと
f
(そこで私はアドレスと値を知っています)。
事前にありがとうございます
編集 : なるほど、ありがとうございます。もう少し調べてみたら、かなり有用なトピックを見つけました。
ポインタと参照
googleコーディングガイドラインへのリンクもあります。
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Reference_Arguments
これはかなり
useful
今更ながら、主体的な嗜好の一種であることを実感。
クリア
どのように解決するのですか?
f2
は参照によって引数を取っていますが、これは本質的には
エイリアス
というものです。 ポインタと参照の違いは、参照はNULLではありえないということです。 を使うと
f
を渡す必要があります。
アドレス
(を渡す必要があります。参照渡しの場合は、パラメータを渡すだけでエイリアスが作成されますが、ポインタに渡すパラメータのアドレス(&演算子を使用)を渡す必要があります。
const参照による受け渡し (
const double& ref
) は、関数内部で引数を変更しない場合に好ましく、引数を変更する場合には、非constリファレンスを使用します。
ポインターは、主に以下のような場合に使用されます。
NULL
をパラメータに渡せるようにする必要がある場合に使われます。
NULL
であるかどうかをチェックする必要があります。
関連
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】ポインタとリファレンス