一个例子了解static作用
2016-03-06 16:51
267 查看
static关键字在C语言中作用非常重要。因此在面试的时候,面试官也经常会拿这个来考被面者。我们用个例子来看看这个关键字的作用吧:
很多人傻了,为什么呢?是啊,为什么呢?!
由于被static修饰的变量总存在内存静态区,所以运行这个函数结束,这个静态变量的值也不会被销毁,函数下次使用的时候仍然能使用这个值。
有人就问啊,为什么j一直是1啊。因为每次调用fun2()这个函数,j都被强行置0了。
static的作用:
(1) 函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值;
(2) 在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3) 在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 它的模块内;
(4) 在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5) 在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
#include <stdio.h> static int j; void func1(void) { static int i = 0; i++; printf("i = %d\n", i); } void func2(void) { j = 0; j++; printf("j = %d\n", j); } int main(int argc, char *argv[]) { int k = 0; for(k = 0; k<10; k++) { func1(); func2(); printf("\n"); } return 0; }输出:
很多人傻了,为什么呢?是啊,为什么呢?!
由于被static修饰的变量总存在内存静态区,所以运行这个函数结束,这个静态变量的值也不会被销毁,函数下次使用的时候仍然能使用这个值。
有人就问啊,为什么j一直是1啊。因为每次调用fun2()这个函数,j都被强行置0了。
static的作用:
(1) 函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值;
(2) 在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3) 在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 它的模块内;
(4) 在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5) 在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
相关文章推荐
- 【慕课笔记】2-2 遍历目录
- Python C/C++ 拓展使用接口库(build-in) ctypes 使用手册
- 3.7
- 使用jQuery设置disabled属性与移除disabled属性
- 选择类排序---堆排序
- 图搜索——危险系数
- 虚拟键盘,移动web开发的痛
- 数据库事务
- 向apache添加模块
- 值得学习的C语言开源项目
- 关于使用genymotion"创建 VirtualBoxClient COM 对象失败. 应用程序将被中断“的解决方案
- 指针和指针的引用
- 学习进度条(第一周)
- 开发过程中收集的第三方资源
- Android ScrollView如何判断上下滑的方向
- 历届试题 最大子阵
- Java中String
- 一种在android中实现MVP模式的新思路
- 作业二
- 阅读计划