What is the use of static variables inside C functions?
本问题已经有最佳答案,请猛点这里访问。
这个程序中静态变量的用法是什么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /* program to find the addition of n numbers without using recursion:*/ #include<stdio.h> int main(){ int n,sum; printf("Enter the value of n:"); scanf("%d",&n); sum = getSum(n); printf("Sum of n numbers: %d",sum); return 0; } int getSum(n){ static int sum=0; if(n>0){ sum = sum + n; getSum(n-1); } return sum; } |
通过声明
1 2 3 4 5 6 7 8 9 10 11 | int sum = 0; int getSum( int n ) { if ( n > 0 ) { sum = sum + n; getSum( n - 1 ); } return sum; } |
但限制了
然而,这通常不是您想要如何编写这样的函数。不需要创建持久变量;只需将其编写为
1 2 3 4 5 6 | int getSum( int n ) { if ( n > 0 ) return n + getsum( n - 1 ); return n; } |
虽然您需要进行一些健全性检查以确保不会溢出,但您可能希望
因此,
1 2 3 | getSum( 0 ) == 0 getSum( 1 ) == 1 + getSum( 0 ) == 1 + 0 == 1 getSum( 2 ) == 2 + getSum( 1 ) == 2 + 1 + getSum( 0 ) == 2 + 1 + 0 == 3 |
首先,函数是错误的。它的参数必须是
至于静态变量,则它在函数调用之间共享。它在函数的连续调用之间保留其值。所以它在函数中用作累加器。
我将按以下方式编写函数
1 2 3 4 5 | int getSum( n ) { if ( n == 0 ) return 0; else return n + ( n > 0 ? getSum( n - 1 ) : getSum( n + 1 ) ); } |
考虑到如果函数声明放在函数main之前会更好。在这种情况下,编译器可以检查函数是否被正确调用。
还有节目前的评论
1 | /* program to find the addition of n numbers without using recursion:*/ |
是错误的,因为函数是递归的。:)它调用自己。
在此示例中,SUM将只声明一次。
这意味着,只有在第一次调用函数时,它才会得到初始值(0),每隔一次调用函数时,它都将保持与以前的值相同,就像一个全局变量一样。
静态的另一个用途是它的基本概念,所以你应该更多地了解它,网上有很多信息。
正如fiddling位建议的那样,不要混淆getsum和main函数的和,尽管我说过可以将sum视为全局变量,但它的作用域仅在getsum函数中,并且其中的实例与main函数中的实例完全不同。总而言之,我只是在引用getsum中的实例。