问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?

发布网友 发布时间:2022-04-23 19:12

我来回答

5个回答

热心网友 时间:2023-10-14 09:44

可以,static在C语言中是表示一个变量为静态变量的,而不是常量,也不是不可变的变量。所谓的静态变量有两种情况,一种是静态全局变量,一种是静态局部变量。

像在VB,C#,C,C++,Java,PHP,Objective-C,JavaScript中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、PROLOG、Ada等语言中也是有出现的,只是有着不同的作用,对于其具体作用,读者有需要的时候是可以具体查阅的。

扩展资料:

静态全局变量有以下特点:

该变量在全局数据区分配内存;未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);

静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。

热心网友 时间:2023-10-14 09:45

可以,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声明也不可以使用,这样可以有效避免不同文件全局变量的冲突。

热心网友 时间:2023-10-14 09:45

楼主:
可是C语言中说
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。

所谓的结束后不消失保留原值是指当前函数结束后该static变量所占的内存不释放。
函数内一般定义的变量(Auto 变量)在函数运行结束的时候自动释放掉。而static变量不被释放。

不过也有不能赋新值的情况,如下:
例如:
#include<stdio.h>
void main()
{
int f(int);
int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
int f(int a)
{
auto int b=0; //auto 是自动变量,可省略。
static int c=3;
b+=1;
c+=1;
return(a+b+c);
}
运行过程:
for有三次循环,第一次进入函数中运算后——a为2,b为1,c为4——返回a+b+c为7。
第二次循环进入函数时,b被再次被定义为0,而static变量c仍然保持为4,经过运算最后返回8。
第三次也同样,最后返回9。

第一次调用开始 b 0 c 3
第一次调用结束 b 1 c 4
第二次调用开始 b 0 c 4
第二次调用结束 b 1 c 5
第三次调用开始 b 0 c 5
第三次调用结束 b 1 c 6

参考资料:C程序设计 谭浩强

热心网友 时间:2023-10-14 09:46

当然可以啊,只是静态变量又不是常量,只是它会保留上次执行后的值,你还是可以给它赋值的
static int a = 2;
a += 2;
不久是重新赋值了吗?追问请问保留上次执行后的值,我有点不明白

追答就是上次函数调用的值

int fun()
{
static int a = 2;
a += 2;
}
每调用一次a就会加2

热心网友 时间:2023-10-14 09:46

可以赋值,只不过该值在函数执行完后不释放,其值会保留,直到重新赋值。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我用耳机玩爱唱久久怎么唱出来的不响? 电脑ktv点歌软件有哪些电脑用什么点歌软件比较好 更换变速箱油后,汽车刹车和起步时底盘常有嘎啦嘎啦的异响是什么原因... 格兰仕空调口碑怎么样 格兰仕空调的优缺点有哪些? 格兰仕空调怎么样?质量好吗? 什么是PNC金融服务集团 挖出蛇是好事还是坏事? 微信换行怎么换到下一行 微信如何将自己的位置定位发绐别人 去香港买友邦保险怎么样? 现在*的高收入人士很流行到香港买保险,请问香港保险保险吗?是不是安全可靠?如何办理? 香港保诚保险购买经历 香港有多少家保险公司,比较靠谱的保险公司是哪几家? 保诚的重疾险值得买吗 香港买的英国保诚保险是真的吗? 香港宝诚保险靠谱吗? 怎么才能让自己投在别人公司的钱拿回来 别人公司要给我们公司投资,请问我们该怎么办啊?? 一个公司让投1万,再联系几个人的话,第一个人就可以把本钱那会,这种营销方式属于什么?合法吗? 我想入股别人的公司,现在这种情况应该怎么操作? 去朋友公司打拼,让投钱给股份,要注意什么? 想入股别人的公司应该要注意什么 没有自己的公司和团队,可以借用别人的公司投么?需要什么条件?? 朋友的公司如何参股 如何写一份让别人投资公司计划书? 怎样让别人投资我的公司 风险投资? 已经赚钱的成熟公司在什么情况下会需要别人投资入股? 自己开个公司·想让别人入股·股权怎么分配 如何给自己的公司拉投资? 用static修饰的成员变量和其他的成员变量有什么区别 任何用static修饰的变量都会自动获得初值0吗?在线等。 为什么用static来修饰方法或者变量?用处 java 中static修饰的变量的问题 java方法中用static修饰变量为什么会出错? C语言中static 修饰的变量只能在本文件中使用吗 static变量特点 Java中 final和static修饰的变量有什么区别? 求教,static修饰类中变量的问题 java中final和static修饰变量有什么好处 JAVA中static修饰成员变量时 和 不修饰成员变量时的区别 如下面的两个例子 的区别 为什么下面的是错误的 java中什么时候该用static修饰方法?有什么好处或者坏处? 能讲解一下java中static修饰符作用吗(详细一点,越详细越好 static修饰全局变量 局部变量和函数时候的区别 static修饰的变量叫做 “醇不过水仙,香不过肉桂”, 漫谈武夷岩茶果香肉桂有什么特别? 地球有几个海沟? 海沟分布在哪些地方? 海沟分布在哪里? 世界十大海沟有哪些?