位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 static变量

提问人:刘团圆发布时间:2020-12-01

在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。局部静态变量和全局变量一样存储在静态存储区。

1.静态变量的定义形式

    static数据类型变量表列;

2.说明

(1)静态内部变量属于静态存储方式。在函数体内定义的静态变量,即便所在函数调用结束也不释放。也就是说,静态内部变量在程序执行期间始终存在,它的生存期为整个程序。不过,其他函数是不能引用不属于自己的静态变量的。

(2)和auto变量一样,静态变量也允许初始化,初始化形式为:

    static数据类型变量1=初值,变量2=初值,…;

    例如:

    static long s=l;

(3)静态变量如果定义了但没有初始化,系统会对它自动赋以"0"(整型和实型)或"\0"(字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值。

3.静态全局变量

C语言中,也可以在一个全局变量的定义前面加static修饰,但此处的static与静态局部变量的static的意义不一样:

© static加在局部变量前,其含义是让一个变量存储在静态存储器中,保证函数执行结束时不释放该变量。

© static加在全局变量前的含义是告知编译器,这个全局变量仅在本文件中可用,不能被其他文件调用。

一个C语言源程序可以由多个源文件(.c)组成。在一个源文件中定义的全局变量(外部变量)可以被本程序中的每个源文件使用。但如果在全局变量的前面再加static标识符,就构成了静态的全局变量,这样的全局变量的作用域只在本文件内部。

说明:

即便是不加static修饰符,全局变量也是存储在静态数据区,它的生命期是整个程序执行期间。当程序执行完毕时,全局变屋才会被释放。当全局变量加上static修饰符时,只是限制了全局变量的作用域只局限在定义它的源文件内,程序中的其他源文件不能使用。例如: 

file1.c中:

static int I; 

float y; 

void fun()

{

}

main()

}

}

file2.c

main()

{

extern float y;


Y-a+b;

}

    程序中,file1中定义了两个全局变量,其中i为静态型,不能被別的文件所调用,y可以被其他文件调用,调用时要用extern进行声明,表明是一个外部变量。

    静态全局变量可以避免其他模块对全局变量的调用,防止出现错误,同时也降低了模块之间的耦合度。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部