C语言关键字-static

来源:本站
导读:目前正在解读《C语言关键字-static》的相关信息,《C语言关键字-static》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言关键字-static》的详细说明。
简介:众所周知局部变量在存储方式上可以分为auto (默认的,可省略) static register这3种 其中auto是分配在栈上,占用动态存储空间,在函数调用结束后自动释放;static 分配在静态存储空间,两者的作用域相同,但是生存周期不同,static在所处模块初期初始化一次,其后不再进行初始化。

用法1:在一个函数体内使用static定义一个变量,保证该变量只进行一次初始化

例:#include "stdio.h"

int test(void)

{

static int i=0; //对应 int i=0 结果为i=1 i=1 i=1 i=1 i=1

i++;

return i;

}

int main( )

{

for(int j=0;j<5;j++)

printf("test=%dn",test());

return 0;

}

输出结果:i=1 i=2 i=3 i=4 i=5

用法2:在模块内,函数体外声明的static变量,只能被模块内函数调用,而模块是无效的(其中模块即:一个.c文件和一个.h文件的 结合,其中在STM32单片机C设计中经常使用)。同样的一个在模块内被声明为static的函数也只能在模块内被其它函数调 用,而模块外是无权调用的。一句话总结就是保护一些不能被其它文件访问的全局变量和函数;防止了不同人定义的文件变 量名和函数名的重复引起的错误

例://file1.cpp

int VarA=0;

static int VarB=0;

extern void FunB(void) //其中函数前面加extern表示定义为外部函数,其实可以省略,因为C语言默认省略为外部可 //调用

{

;

}

static int FunA (void) //加了static为静态函数,只能在本模块使用

{

int i=0;

i++;

return i;

}

//file2.cpp

extern int VarA; //可以

extern int VarB;//错误,为静态变量

extern int FunB;//可以

extern int FunA;//错误,为静态函数

总结:众所周知局部变量在存储方式上可以分为auto (默认的,可省略) static register这3种 其中auto是分配在栈上,占用动态存储空间,在函数调用结束后自动释放;static 分配在静态存储空间,两者的作用域相同,但是生存周期不同,static在所处模块初期初始化一次,其后不再进行初始化,同时如果没有初始化则默认是0或者空字符,但是auto的无初始化的值是随机的数;其中针对C++系统不管是否有static修饰都会调用默认构造函数进行初始化。

提醒:《C语言关键字-static》最后刷新时间 2024-03-14 01:02:09,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言关键字-static》该内容的真实性请自行鉴别。