菜鸟笔记
提升您的技术认知

关键词static的用法-ag真人游戏

#include 
void test()
{
    int i = 0;
    i  ;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i  )
   {
        test();
   }
    return 0;
}

 调用十次test函数,每次调用时i都要重新初始化,因为上一次结束后i值已经销毁,因此打印10次1.

接下来用static来修饰局部变量i:

#include 
void test()
{
    static int i = 0;        //修饰局部变量
    i  ;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i  )
   {
        test();
   }
    return 0;
}

 输出就由10个1变成1-10,原因时当函数调用完后i值不销毁,再次调用test时直接i=i 1,打印十次为1 2 3 4 5 6 7 8 9 10.

结论:static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束, 生命周期才结束。

在一个源文件内定义全局变量

 在另一个源文件内用extern声明引用此全局变量:

打印成功

在全局变量前用static修饰:

再次重复打印步骤:

 发生错误

结论:一个全局变量被static修饰,改变了变量的作用域-让静态的全局变量只能在自己所在的源文件内部使用,生命周期不变。

在一个源文件内定义加法函数:

 另一个源文件里使用:

成功打印

用static修饰加法函数:

再次打印:

 

发生错误。

结论:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

 static修饰全局变量与函数作用相同,因为未加static时全局变量与函数都具有外部链接属性,使他们在其他源文件内用extern声明后即可使用。使用static后,全局变量与函数的外部链接属性->内部链接属性,让他们无视了extern的作用,只能在他们所在的源文件内使用。

网站地图