0

関数の重要なパラメーターには、ポインター、アドレス、および配列があります。

void somethingHappens (int *a); //pointers
void somethingHappens (int& a); //address
void somethingHappens (int arg[]); //array

上記の関数を使用 (初期化) するとしたら、どのようになりますか? \私の答えは以下です。私が間違っている場合は修正してください。

int i = 9; int j[20] = {1,2,3,4,5};
somethingHappens(&i); //pointers
somethingHappens(&i); //address - Not really sure...
somethingHappens(j); //array

関数の重要なパラメーターが他にありませんか?

4

1 に答える 1

3

最初のケースでは(あなたが正しく述べたように)、引数はポインタを介して渡されます。つまり、引数のアドレスがメソッドに渡されます。これにより、メソッドはポインタが指すメモリ位置に直接アクセスできます(ポインタも変数ですが、代わりにメモリ アドレスを保持することに注意してください)。

2 番目のケースでは、引数はエイリアスとして渡されます。これは最初の方法と非常によく似ていますが、唯一の違いは、引数のメモリ アドレスを使用してその値にアクセスしないことです。

3 番目のケース (興味深いことに) では、配列変数を渡すときに参照によって渡されます (配列 arr[] の場合、arr は配列のベース アドレス、つまり 0 番目の要素のアドレスまたは &arr[0] を表します)。したがって、メソッドで配列を操作すると、呼び出し元にも反映されます。

2 番目のケースでは、

void somethingHappens (int& a);

これへの呼び出しは、次の形式にする必要があります。

somethingHappens(i); 
// somethingHappens(&i); is wrong because &i means the location of i, 
// while the method is expecting an alias and not an address


詳しくは

于 2012-10-18T05:08:00.267 に答える