Static 变量放在函数内外,有什么区别?
一、Static 变量放在函数内外的区别
区别就是静态变量只有名列前茅次运行函数的时候被创建,并且在函数结束的时候不会消亡;而普通的成员在函数结束的时候就会在内存中退栈消亡。
说了那么多,举个例子:
//Ex_1.c
void fun_1 ()
{
static int a = 0;
a ++;
printf (“%d”, a);
}
void fun_2 (int times)
{
int i = 0;
for (;i < times; i++)
{
fun_1 ();
}
}
之后再执行fun_2的话,就会依次打印:12345….直到times;
如果去掉static关键字,执行fun_2,屏幕就会打印111111…次数为times次;
下面举例说明一下函数外的:
//H.h
#ifndef _H_H_
#define _H_H_
static int a = 0;
#endif
//Ex_2.c
#include “H.h”
void fun_ex2 ()
{
a++;
printf (“%d”, a);//这时会打印1
}
//Ex_3
#include “H.h”
void fun_ex3 ()
{
printf (“%d”, a);//这时打印的依然是0,即便先被Ex_2中的fun_ex2()函数修改过,因为他们
//是两个独立的副本
}
延伸阅读:
二、static 函数 与 普通函数的区别
用static修饰的函数 本限定在 本源文件中 不能被本源码文件以外的代码文件调用
而普通函数,默认是extern 的,也就是说,可以被其他代码文件调用该函数
在函数的返回类型前 加上static ,函数就被定义成为静态函数。
普通函数的定义和声明默认情况下是 extern的,但静态函数只是在声明它的文件中可见,因此可以避免在其他源文件中引起错误,
从以上分析可以看出,把局部变量改变为静态变量后是改变了他的存储方式即改变了他的生存期。
只在当前源文件中使用的函数应该说明为内部函数,内部函数应该在当前源文件中说明和定义。
对于在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

相关推荐HOT
更多>>
什么是流式分析?
一、什么是流式分析流式分析是指对数据记录进行连续不断地处理和分析,而不是分批进行。通常,流式分析对于在生成数据时连续发送少量数据(通常...详情>>
2023-10-11 22:36:50
实施 GRC 面临哪些挑战?
一、实施 GRC 面临哪些挑战?当企业将 GRC 组件集成到组织活动中时,他们可能会面临挑战。1、变更管理GRC 报告提供了指导企业做出准确决策的见...详情>>
2023-10-11 19:35:31
主要的路由协议有哪些?
一、主要的路由协议有哪些?路由协议是一组规则,用于指定路由器如何识别和转发网络路径上的数据包。路由协议分为两个不同的类别:内部网关协议...详情>>
2023-10-11 18:31:31
VC中的MFC的几种SDI?
一、VC中的MFC的几种SDI区别SDI就是记事本类程序的标准模式;MDI就是word类程序的标准模式;对话框就不用多说了,系统设置、文件属性等等很多配...详情>>
2023-10-11 18:10:35