我該如何處理下面的代碼? &arr[1]
完全拋棄了我。我剛開始認爲我得到了遞歸。說n = 7
。然後它將首先打印出arr[6]
,然後printArray(6, &arr[1])
,printf ("%d", arr[6-1])
。
它會重複只要n>0
。帶&符的遞歸調用函數
但是第二個元素的地址是如何進入這個遞歸的。
void printArray(int n, int arr[]){
if(n>0){
printf("%d", arr[0]);
printArray(n-1, &arr[1]);
}
}
我真的不明白arr [0]和第二個元素&arr [1]的地址之間的相互作用。當它調用函數時發生了什麼,因爲printf已經被設置爲arr [0],它會不會繼續打印第一個元素? – oxodo
這就是訣竅,你發送第二個元素的地址,並在第二次調用'printArray'時該元素將是第一個。因爲在c中,數組是指向第一個的指針。 – Mare70
請記住,遞歸調用中的'arr'與調用者中的'arr'不同。在第一個版本中,正在傳遞'&arr [1]',這只是'arr + 1'。所以從調用者的角度來看,遞歸調用是打印'(arr + 1)[0]',這只是'arr [1]'。 –