C语言 函数作用域中静态变量和局部变量的区别



我试图找到输入整数中的位数。但它总是打印"no"。数字:1"。代替从函数中得到整数i,如果我用"static int i = 0;";在函数内部,它可以完美地工作。
我不能理解这种行为。

#include <stdio.h>
int func(int a, int i)    
{  
if (a != 0) 
{
i++;
func(a / 10, i);
}
return i;   
}
int main()
{
int a, c;
printf("Enter the No:");
scanf("%d", &a);
c = func(a, 0);
printf("No. of digits: %d", c);
return 0;    
}

递归在每次调用时重复刷新函数的内存。是一样的,就像global variablelocal variable之间的问题一样。当不使用static时,每次调用函数都会刷新变量i并再次初始化它。当您使用static时,变量i将与只有一条语句的全局变量相同。

关于你关于静态的问题:

不清楚您想在哪里使用static int i = 0;作为替代。在函数内部(并删除函数arg i),它成为一个变量,即使在函数退出后也保留在内存中。参考这个问题。如果是在函数之外,请参考这个问题

关于你的代码:您的代码没有使用递归函数调用的结果。它既不存储在局部变量i中,也不直接返回。它只是失去了。请看下面的代码示例,这可能是你想要的。

编辑:原来答案中的变量i是不必要的,所以我将它删除。

#include <stdio.h>
int func(int a) {
if (a == 0) {
return 0;
}
return 1 + func(a / 10);
}
int main() {
int a, c;
printf("Enter the No:");
scanf("%d", &a);
c = func(a, 0);
printf("%d", c);
return 0;
}

最新更新