static 关键字的用法(c语言)
2016-06-13 00:03
363 查看
一、两个重要作用:
1.修饰变量
(1)作用域:
a.静态全局变量:仅限于变量被定义的文件,从定义处开始到文件结尾处结束。(其他文件即使用extern声明也无法使用)要想在定义之前使用它,就必须在之前加extern ***语句。
b.静态局部变量:仅在定义变量的局部作用域内。
(2)生命周期:整个程序的存在周期。
(3)存储空间:静态区
(4)只被初始化一次
下面,来看看下面这段程序,测测你对这个到底理解了多少呢?
上面这段程序的输出结果是什么呢?
因为静态变量只被初始化一次,所以这段程序的结果应该是:1 2 3 4 5 6 7 8 9 10
那么,下面这段代码的输出结果又是什么呢?
输出结果是什么呢???代码有木有和上面很像。然而结果却是截然不同的,这个程序输出10个11。为什么呢?i只被初始化一次,但它可以被多次赋值哦。
2.修饰函数 -->静态函数
改变了函数的作用域:使函数的作用域局限于本文件(又称内部函数),好处是:不同的人编写函数时,不用担心自己定义的函数与其他文件的函数同名。
1.修饰变量
(1)作用域:
a.静态全局变量:仅限于变量被定义的文件,从定义处开始到文件结尾处结束。(其他文件即使用extern声明也无法使用)要想在定义之前使用它,就必须在之前加extern ***语句。
b.静态局部变量:仅在定义变量的局部作用域内。
(2)生命周期:整个程序的存在周期。
(3)存储空间:静态区
(4)只被初始化一次
下面,来看看下面这段程序,测测你对这个到底理解了多少呢?
<span style="font-size:14px;">#include <stdio.h> #include <stdlib.h> void fun() { static int i = 0; printf("%d ", ++i); } int main() { int j = 0; for(j = 0; j < 10; j++) { fun(); } system("pause"); return 0; }</span>
上面这段程序的输出结果是什么呢?
因为静态变量只被初始化一次,所以这段程序的结果应该是:1 2 3 4 5 6 7 8 9 10
那么,下面这段代码的输出结果又是什么呢?
#include <stdio.h> #include <stdlib.h> static int i = 0; void fun() { i = 10; printf("%d ", ++i); } int main() { int j = 0; for(j = 0; j < 10; j++) { fun(); } system("pause"); return 0; }
输出结果是什么呢???代码有木有和上面很像。然而结果却是截然不同的,这个程序输出10个11。为什么呢?i只被初始化一次,但它可以被多次赋值哦。
2.修饰函数 -->静态函数
改变了函数的作用域:使函数的作用域局限于本文件(又称内部函数),好处是:不同的人编写函数时,不用担心自己定义的函数与其他文件的函数同名。
相关文章推荐
- **C++**C++刷题笔记
- 指针
- ACM:蓝桥杯:c、c++、进行四舍五入保留
- c语言学习笔记25之指针1
- c++的编译和运行
- C++中单冒号和双冒号的用法
- C++三种构造函数以及explicit和friend关键字
- 安卓/平台QtQuick+socket.io+C++搭建聊天系统
- c++宽字符
- C++利用MSQL API连接和操作数据库
- C++利用MSQL API连接和操作数据库
- 日常练习
- C++实现string的trim函数
- 算法导论第十二章-二叉搜索树-Cpp代码实现
- Codeforces Round #354 (Div. 2) C Vasya and String
- VS项目属性项的一些配置总结
- 简述C++虚函数作用及底层实现原理
- C++ 异常机制分析
- C++类和结构体的区别
- C++:文件加密(凯撒加密、栅栏加密、异或加密四方加密、Base64加密)