因为在很长一段时间里面一直在写面向对象的东西,比如用C#和Java来写东西,习惯了成员变量和成员函数。对static的了解仅限于他的生命期
在类中,而不是在对象,它为所有的类的对象所共享。但是在C语言里面他究竟有什么意思呢?
第一、静态局部变量(static)
众所周知,局部变量在进入该局部作用域时自动创建,离开时自动销毁,即所谓的块作用域。块作用域可以防止命名冲突,有助于帮助函数独立
化,但是有时候会有特别的需求,比如,统计一个递归函数递归调用了多少次。这个时候局部变量便会在每次进入函数的时候进行创建,根本不
能用作计数器。但是又不想使用全局变量,以免造成名字污染,这时候静态局部变量就派上用场了。静态局部变量的也是块作用域,但是他拥有
永久的存储单元,也就是说他可以再被函数本身访问到,如下代码,可以达到统计递归的次数:
#include <stdio.h>
int recu_times();
int main()
{
printf("%d/n", recu_times());
}
int recu_times()
{
static int cnt = 10;
cnt--;
if(cnt > 0)
recu_times();
return cnt;
}
静态局部变量始终有块作用域,所以他对其他的函数是不可见的。静态局部变量是对其他函数隐藏数据的地方,但是它会为将来同一个函数再调用
保留这些数据。
第二、静态全局变量(static)
当使用static声明全局变量的时候,static说明变量具有内部链接。首先需要理解一下,如果全局变量没有声明为static,则在其他文件中可以
通过extern声明来访问此变量,比如我在一个文件中定义了全局变量int i,我就可以在另外一个文件使用extern int i,来声明后就可以在另
外一个文件中访问变量i的值。如果定义了static之后,则无法再访问。
static的这种静态全局变量用来实现一种信息隐藏技术。
分享到:
相关推荐
C语言关键字详解,很全面,希望能给大家带来帮助。
C语言中比较经典的static和const的用法
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66...
详细的描述C/C语言的关键字static的作用,及使用时应该注意的事项!
本文我将采用Linux环境测试C语言存储空间布局,以及采用VC6.0来测试static的常见用法。采用Linux环境来测试C语言存储空间布局,是因为Linux很容易利用shell命令中的size命令查看到进程存储区各段的大小。采用VC6.0来...
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66...
3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。4、文字常量区...
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66...
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66...
extern与static存储空间矛盾 ..................................................................................................... 130 31. PC-Lint与C\C++代码质量 ..........................................
static extern auto 存储类 auto 存储类是所有局部变量默认的存储类。 { int mount; auto int month; } 上面的实例定义了两个带有相同存储类的变量,auto 只能用在函数内,即 auto 只能修饰局部变量。 ...
C语言 全局变量和局部变量详解 核心内容: 1、局部变量和全局变量 变量按照作用域分为:全局变量和局部变量 全局变量的作用域:从定义位置开始到下面整个程序结束。 局部变量的作用域:在一个函数内部定义的...
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66...
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66...
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66...
60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 ...
详解C语言函数返回值解析 程序一: int main() { int *p; int i; int*fun(void); p=fun(); for(i=0;i<3;i++) { printf(%d\n,*p); p++; } return 0; }; int* fun(void) { static int str[]={1,2,3,4...
主要给大家介绍了关于C++面试基础之static关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
一.C语言中的static关键字在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。(1)修饰局部变量一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该...