C 带符号AND的递归调用函数
我应该如何解释下面的代码?C 带符号AND的递归调用函数,c,arrays,recursion,C,Arrays,Recursion,我应该如何解释下面的代码?&arr[1]把我彻底甩了。我刚开始觉得我得到了递归。说n=7。然后它将首先打印出arr[6]然后printary(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]
把我彻底甩了。我刚开始觉得我得到了递归。说n=7
。然后它将首先打印出arr[6]
然后printary(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]);
}
}
您发布的版本每次都会继续打印最后一个元素,因为在每次重新激活调用时,它(a)会减少计数,(b)会调整
arr
以指向数组中的下一个元素
以下是将按顺序打印整个阵列的版本:
void printArray(int n, int arr[])
{
if (n > 0) {
printf("%d", arr[0]);
printArray(n-1, &arr[1]);
}
}
或者,您可以先递归:
void printArray(int n, int arr[])
{
if (n > 0) {
printArray(n-1, arr);
printf("%d", arr[n-1]);
}
}
我使用的格式说明符与您在示例中使用的格式说明符相同,但请注意,使用此格式的元素之间没有分隔。您可能希望在末尾添加空格或换行符。您发布的版本每次都将继续打印最后一个元素,因为在每次重新调用时,(a)减少计数,(b)调整
arr
以指向数组中的下一个元素
以下是将按顺序打印整个阵列的版本:
void printArray(int n, int arr[])
{
if (n > 0) {
printf("%d", arr[0]);
printArray(n-1, &arr[1]);
}
}
或者,您可以先递归:
void printArray(int n, int arr[])
{
if (n > 0) {
printArray(n-1, arr);
printf("%d", arr[n-1]);
}
}
我使用的格式说明符与您在示例中使用的格式说明符相同,但请注意,使用此格式的元素之间没有分隔。您可能需要在末尾添加空格或换行符。C中的数组只是指针
&arr[1]
是指向数组中第二项的指针。C中的数组只是指针&arr[1]
是指向数组中第二项的指针。我不太理解arr[0]和第二个元素&arr[1]的地址之间的相互作用。当它调用函数时会发生什么情况,因为printf已经设置为arr[0],它不会继续打印第一个元素吗?这就是诀窍,您发送第二个元素的地址,在第二次调用printary
时,该元素将是第一个元素。因为在c中,数组是指向第一个的指针。记住,递归调用中的arr
与调用方中的arr
不同。在第一个版本中,传递的是&arr[1]
,即arr+1
。因此,从调用者的角度来看,递归调用正在打印(arr+1)[0]
,这只是arr[1]
。我并不真正理解arr[0]和第二个元素&arr[1]的地址之间的相互作用。当它调用函数时会发生什么情况,因为printf已经设置为arr[0],它不会继续打印第一个元素吗?这就是诀窍,您发送第二个元素的地址,在第二次调用printary
时,该元素将是第一个元素。因为在c中,数组是指向第一个的指针。记住,递归调用中的arr
与调用方中的arr
不同。在第一个版本中,传递的是&arr[1]
,即arr+1
。因此,从调用方的角度来看,递归调用正在打印(arr+1)[0]
,这只是arr[1]
。