我该如何处理下面的代码? &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]'。 –