static的用法

来源:互联网 发布:使用隐藏的域名转发 编辑:程序博客网 时间:2024/06/04 01:18

1、static修饰局部变量:

在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:
(1)该变量在全局数据区分配内存
(2)如果不显示初始化,那么将被隐式初始化为0
(3)它始终驻留在全局数据区,直到程序运行结束
(4)此变量在函数运行结束的时候没有被销毁还是存在的;退出一个块之后仍然存在的局部变量

2、static 修饰全局变量:

在全局变量前面加上关键字static,该全局变量变成了全局静态变量。
全局静态变量有以下特点:
(1)在全局数据区内分配内存
(2)如果没有初始化,其默认值为0
(3)该变量在本文件内从定义开始到文件结束可见,即只能在本文件内使用


3、static 修饰函数:

在函数的返回类型加上static关键字,函数即被定义成静态函数。
静态函数有以下特点:
(1) 静态函数只能在本源文件中使用
(2) 在文件作用域中声明的inline函数默认为static
说明:静态函数只是一个普通的全局函数,只不过受static限制,他只能在所在文件内使用,不能在其他文件内使用。

include <stdio.h>static int a = 10;   // 静态全局变量,只在本文件内可见 void func(){int i = 0;static int j = 0;  // j是静态局部变量,只会被定义一次,在程序结束前,该变量始终存在(函数结束之后他还是存在的,知道程序结束才消失)i++;j++;printf ("i = %d,  j = %d\n", i, j);}int main(){int i = 0;for (i = 0; i < 10; i++){func();}return 0;}

这是运行结果

 i 一直是等于1,因为我们知道的,主函数调用了一次子函数,执行完一次操作子函数就会 i 就是被销毁;

所以下次调用的时候重新定义初始值0,执行完之后等于1,退出子函数,i 又被销毁;

可是被static修饰的 j 就不一样了,他会一直存在的局部变量,除非整个程序结束他才会被销毁,所以他会在程序结束之前一直 ++

原创粉丝点击