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
更多>>
接口测试测试用例怎么写?
一、接口测试测试用例1. 某个用例的测试目的是什么在进行接口测试脚本的编写前,我们应该明确这批脚本的预期目标在哪里,是为了验证什么内容。...详情>>
2023-10-14 22:40:12
物联网是做什么的?
一、物联网是做什么的物联网(Internet of Things,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等...详情>>
2023-10-14 20:08:42
c++命名都有什么潜规则?
一、c++命名的潜规则在 C++ 中,命名有以下一些潜规则:标识符应该有意义,能够清晰地描述其所代表的实体。标识符应该以字母或下划线开头,不能...详情>>
2023-10-14 17:05:02
Rust 的优点是什么?
一、Rust 的优点Rust是一种系统级编程语言,由Mozilla开发和维护。Rust的设计目标是将安全性、并发性和性能相结合,成为一种快速、安全和可靠的...详情>>
2023-10-14 13:52:05