自己完成c语言时自己想出的问题,求解答

#include<stdio.h>
#include<string.h>
int *num(char p,char ch)
{int i=0,d;
static int c;
if(
(p+i)!='\0')
{if(
(p+i)==ch)++c;
i++, num((p+i),ch);
}
d=&c;
return d;
}
main()
{char s[]="fkhkkhdfhfjk",ch;
int *d,i,k=0;
ch=getchar();
d=num(s,ch);
printf("%d",*d);
for(i=0;i<strlen(s);i++)
if(s[i]==ch)k++;
printf("\n%d",k);

img


第二行运行结果为什么是4而不是零,递归函数每次递归时static int c=0;应该都会生效啊!

static int c=0只是表明静态变量初始化为0,后续函数调用时,c变量不再进行初始化,因此始终保留之前存储的结果,不会重复初始化的

static int c=0意味着,变量c只初始化一次,初始化时间为第一次调用该变量所在函数时,当所在函数执行结束时,static int c所拥有的内存不会被回收,即c存储的值也不会发生改变。下次调用该函数时,由于c的内存并没有释放回收,所以也不会进行分配空间,初始化变量等操作

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632