Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带符号AND的递归调用函数_C_Arrays_Recursion - Fatal编程技术网

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]