以下のコードをどのように解釈する必要がありますか? &arr[1]
は完全に私を投げた。私はちょうど私が再帰を取得していたと考え始めました。いいえ、n = 7
と言ってください。その後、最初にarr[6]
、printArray(6, &arr[1])
、printf ("%d", arr[6-1])
を印刷します。
そして、それはn>0
まで繰り返されます。アンパサンドを伴う再帰呼び出し関数
しかし、この再帰に2番目の要素のアドレスがどのように反映されますか。
void printArray(int n, int arr[]){
if(n>0){
printf("%d", arr[0]);
printArray(n-1, &arr[1]);
}
}
arr [0]と2番目の要素&arr [1]のアドレスとの間の相互作用を理解できません。 printfがすでにarr [0]に設定されているので、関数を呼び出すときに何が起こっていますか?最初の要素を印刷し続けるだけではありませんか? – oxodo
これは、2番目の要素のアドレスを送信し、 'printArray'の2番目の呼び出しで、その要素が最初になるようにします。 cでは、arrayは最初のものへのポインタです。 – Mare70
再帰呼び出しの 'arr'は呼び出し元の' arr'とは異なります。最初のバージョンでは、 '&arr [1]'が渡されています。これはちょうど 'arr + 1'です。したがって、呼び出し元の観点からは、再帰呼び出しは単に 'arr [1]'である '(arr + 1)[0]'を出力します。 –