一个简单的递归输出倒叙数组问题

源代码如下

#include <stdio.h>
#define clod 5
void change(int *p,int n);
int num[clod]={2,2,3,4,6};
int main(void)
{
    //int *p;
    //p=num;
    change(num,-1);
}
void change(int *p,int n)
{
    if(n<4)
    {
     change(p,++n);
     printf("%d\t",*(p+n));
    }
}

问题:

我的数组为5位,按理说递归中的n应该小于5才能正确输出5个数,但是当我n为5时,首位会多一位0,判断是p[5]未知数,改为n=4时,正确输出倒叙,是为啥?

++n 会改变当前递归层中n的值,应该是     change(p,n+1);

#include <stdio.h>
#define clod 5
void change(int *p,int n);
int num[clod]={2,2,3,4,6};
int main(void)
{
    //int *p;
    //p=num;
    change(num,0);
}
void change(int *p,int n)
{
    if(n<5)
    {
     change(p,n+1);
     printf("%d\t",*(p+n));
    }
}

 

p[5] 是未知数是因为你根本就没有 p[5],自然也没有初始化 p[5],那么 p[5] 就是一个随机数。

num数组有五个元素,下标是0到4,

++n 会改变当前递归层中n的值。

当n=4时,++n 后n变成5再输出 *(p+n) 就下标越界了。

应该是用  change(p,n+1); 只对传给下一层递归n的值加1,当前递归层中n的值不变。

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632