C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/28 19:44:38
![C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?](/uploads/image/z/6907077-45-7.jpg?t=C%E8%AF%AD%E8%A8%80%E4%B8%AD+%E5%9C%A8%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%E4%B8%AD%E7%94%A8+static%E4%BF%AE%E9%A5%B0%E7%9A%84%E5%8F%98%E9%87%8F%2C%E8%BF%98%E8%83%BD%E7%BB%99%E5%AE%83%E8%B5%8B%E4%B8%8A%E6%96%B0%E5%80%BC%E5%90%97%3F)
C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?
C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?
C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?
可以,static在C语言中是表示一个变量为静态变量的,而不是常量,也不是不可变的变量.所谓的静态变量有两种情况,一种是静态全局变量,一种是静态局部变量.
先说静态局部变量:通常情况下,在一个函数中定义一个变量,那么函数退出之后,这个变量就消失了,即使你第二次调用这个函数,里面的变量也会被重新赋初值.比如我们写一个函数:
int fun(int a)
{int sum;
sum=sum+a;
return sum;}
这样无论你是第几次调用fun这个函数,sum都会重新被赋初值,也就是函数的返回值一直会是a;而不会出现多次调用累加的情况.
但如果你在一个函数中,用static来声明变量,那么这个变量虽然在函数外部不可用,但退出函数时,这个变量是不会消失的,下一次再调用这个函数,里面的值仍然存在.就说上面这个函数,如果你的第一句写成static int sum;那么你第一次调用fun(3);函数返回3,第二次再调用fun(5);函数返回值是8,因为第一次调用之后的sum=3的值不会消失.
另一种是静态全局变量.因为是全局变量,不存在退出函数消不消失的问题.所以静态全局变量和普通全局变量的区别是:普通全局变量在其他源文件中可以通过extern全局变量名的声明,来使用该变量,而静态全局变量只能在变量所在的文件中使用,即使你在其他文件中使用extern声明也不可以使用,这样可以有效避免不同文件全局变量的冲突.