600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > static函数修饰全局变量和局部变量

static函数修饰全局变量和局部变量

时间:2019-11-17 03:47:11

相关推荐

static函数修饰全局变量和局部变量

staticinta=1;

voidfun1(void){ a=2; }

voidfun2(void){inta=3; }

voidfun3(void){staticinta=4; }

intmain(intargc,char** args){

printf(“%d”,a);

fun1( );

printf(“%d”,a);

fun2( );

printf(“%d”,a);

fun3( );

printf(“%d”,a);

}

结果是:

1 2 2 2

对于static修饰全局变量,最主要的作用就是限定了这个全局变量的作用范围,不可以被其他类,其他文件引用。

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。

这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

但是static修饰局部变量的话,将其放到全局区,也就是静态区,当一个函数里面有一个static修饰的局部变量的时候,如果反复调用多次,那么下一次函数用的该变量的值不会再被初始化一次了,而是采用上一次函数执行完之后此变量的值。所以,说明:1.static修饰的变量的值是可变的2.只是在此函数的调用中为全局变量。

且需要注意的是,静态局部变量只对定义它的函数体始终可见,函数体执行完过后虽然还存在,但是无法被其他的使用了

就是说明,在该函数的调用过程中,这个变量作为全局变量可以被使用。且不随着函数结束释放掉,整个程序结束的时候才被释放掉,但是不被其他的函数所引用。跟真正的全局变量还是有区别的。真正的全局变量是所有的函数都可以访问到。

static修饰局部变量

普通的局部变量是在栈上进行分配的,局部变量所处的函数被多次调用时每次调用的位置都不一样的。局部变量也可以在堆上进行动态的分配,但须记得释放空间。

静态局部变量和普通局部变量区别如下:

访问权限:静态局部变量只能被其作用域内的变量和函数进行访问使用,它虽然存在与程序的整个生命周期,但由于是static的所以不能被其他函数和源文件访问。 相当于只是该函数内的全局变量。

作用位置:静态局部变量被编译器存放在全局存储区(data),所以它虽然是局部的但是却存在与整个生命周期。

值:静态的局部变量如果没有被初始化,会自动被编译器赋值为0,以后每次调用静态局部变量就都会用上次调用的值(每次函数调用静态局部变量都修改它然后离开,下次读的时候从全局存储区读的静态局部变量就是上次修改后的值)。

注意:

由于函数的每次调用,普通的局部变量都会重新分配,而静态局部变量会保持上次调用的值不变。正是由于static局部变量的这种特性,使得静态局部变量的函数变得不可重入,即每次调用可能会产生不同的结果,这在多线程编程时可能会成为一种隐患。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。