私はパラメータが参照である関数を持っています。私はこの関数にポインタ引数を渡す必要があります。このような状況では、以下の宣言は有効ですか?そうでない場合、私は何をする必要がありますか?パラメータが参照である関数へのポインタの受け渡し
function foo(int& myParam) {
//some code here
}
//function call
int *myArg;
foo(myArg);
私はパラメータが参照である関数を持っています。私はこの関数にポインタ引数を渡す必要があります。このような状況では、以下の宣言は有効ですか?そうでない場合、私は何をする必要がありますか?パラメータが参照である関数へのポインタの受け渡し
function foo(int& myParam) {
//some code here
}
//function call
int *myArg;
foo(myArg);
あなたはmyArgが指す値を使用したい場合、あなたは単にコードすることができます:
foo(*myArg);
参照することにより、ポインタの値を渡すには、ポインタを逆参照しなければなりません。しかし、あなたの状況では、ポインタを初期化することはありません。逆参照すると、未定義の動作が発生します。
あなたはポインタデリファレンスおよび例えば、コンパイラは参照に値を入れてみましょう、しかし、あなたが最初の有効なポインタを持っている必要がありますすることができますint* ptr;
int& ref = *ptr; // dereferencing garbage pointer
:
int *ptr = new int();
foo(*ptr)
delete ptr;
または:
int i;
int *ptr = &i;
foo(*ptr)
ましたあなたはそれを試して?あなたのコンパイラは何を言ったのですか? – aschepler
彼らはあなたが望むことを行う答えを掲載します。しかし、あなたが持っているコードは、あなたが期待している通りのものではありません。ポインタは整数であるメモリアドレス値であることを理解してください。したがって、関数の引数としてポインタが指す値ではなく、ポインタへの参照を渡すことになります。そうすれば、あなたが期待する価値がなくなり、あなたがそれを混乱させると、予測できない結果が生じる可能性があります。 – Rob