静态函数static的理解(代码非原创,博客内容纯属本人感悟)

来源:互联网 发布:linux修改分区大小 编辑:程序博客网 时间:2024/04/29 19:21
# include < stdio. h> 

int f( int a) 
{ 
    auto b = 0; 
    static c = 3; 

    b = b + 1; 
    c = c+ 1; 
    return ( a+ b+ c) ; 
} 

main( ) 
{ 
    int a = 2, i; 

    for ( i = 0; i < 3; i + + ) 
        printf ( "%d\n" , f( a) ) ; 

}

输出7

    8

    9.

因为static函数只在第一次调用该函数时被初始化,后面每次调用该函数时以上一次的值作为初值,可以理解为具有记忆性

而auto函数则是调用一次该函数初始化一次该函数。

比若说第一次运行该程序时,初始化c=3,初始化b=0,第一次运行后c=4,b=1.计算得答案为7.

则第二次运行该函数时,由于static函数的记忆性,c初值为4,运行后变为5,而auto函数是自动变量,此时它将b的值依旧初始化为0,运行后变为1.计算答案8.

第三次运行该函数时,由于static函数的记忆性,c初值为5,auto函数是自动变量,此时它将b的值依旧初始化为0.计算答案9.

---------------------神奇的分界线------------------------------------------

1   #include <stdio.h>
void main()
{
int a,i;

for(a=1;a<=4;a++)
{
static int i=2;
i+=2;
printf("%d\n",i);
}
}

此函数输出  4  6  8  10

-------------

2   #include <stdio.h>
void main()
{
int i;

for(i=1;i<=4;i++)
{
static int i=2;
i+=2;
printf("%d\n",i);
}
}

此函数输出  4  6  8  10

-------------

3   #include <stdio.h>
void main()
{
int i;

for(i=1;i<=4;i++)
{
int i=2;
i+=2;
printf("%d\n",i);
}
}

此函数输出  4  4  4  4

****

总结,由例一和例二得知,对于static函数而言,for中的i和static所定义的i实际上互不影响。结合例三和例二也可以看出.

阅读全文
0 0
原创粉丝点击