あなたが持っていると言う
void foo(int a, int &b, int *c){...}
int main(){
int d=0, e=1, f=2;
foo(d, e, &f);
}
関数宣言のパラメーターは、引数と同じ型でなければならないことを理解しています。したがって、d、e、および f はすべて int であるため、a、b、および c の前の「int」。
しかし、これは参照とポインター、つまり&
とにも拡張されますか (また適用されますか) *
? 私が言いたいのは、もしあなたが を持っているならint &b
、e
すでに住所である必要があるということですか?
私はそう思っていましたが、このスレッドを読んだ後、概念が間違っていると思います: C++ functions: ampersand vs asterisk で概説されているコードは、私が上に書いたものとほとんど同じです。
スレッドと上記のコードを読んだ後、パラメーターの&
and*
は実際には「型制限」の一部ではないようです。つまり、e がアドレスでなければならない、または f がポインターでなければならないという意味ではありません。 .
前をa, b, c
参照してください、パラメーターのパラメーター名を進めたものは何でも、それがどのタイプでなければならないかを厳密に指定していると思いました
したがって、次のようにコーディングします。
void foo(int a, int &b, int *c){...}
int main(){
int d=0, e=1, f=2;
foo(d, &e, *f); // wrong
}
代わりに&
、パラメータの は実際に渡された変数/オブジェクト引数を取り、そのアドレスを変更または取得しているようです。そして、*
実際には、引数として渡された f ( &f
) のアドレスに作用し、その内容を取得しています。これは正しいですか?
これは、指定されたプロトコル/ルールで&
あり*
、受け入れなければならないパラメーターに配置されていますか?
パラメータの参照とポインタに関する多くの記事を読んだことがありますが、それらはすべて、パラメータの&
and*
を使用すると、渡された変数の値を変更できることを非常に明確に説明しています。ただし、パラメーターに配置された場合、&
およびの実際の手順/プロトコルに深く入り込むことはありません。*
http://www.cplusplus.com/doc/tutorial/functions2/
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
これが概念的に正しいかどうか教えてください。ありがとうございました!