| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1108 人关注过本帖
标题:关于局部静态变量
只看楼主 加入收藏
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
结帖率:90.32%
收藏
已结贴  问题点数:20 回复次数:4 
关于局部静态变量
如何理解局部静态变量在程序运行期间都不释放存储空间?是不是只要不释放存储空间局部静态变量就不能被再次赋值?因此局部静态变量只能赋一次初值?
那为什么下面代码中局部静态变量a又能再次赋值为9?
#include"stdio.h"
#include"stdlib.h"
main(){
    static int a=6;
    a=9;
    printf("%d",a);
    system("pause");
}
搜索更多相关主题的帖子: 局部 静态 变量 赋值 include 
2017-09-08 00:13
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:4 
除带有const修饰关键字的变量,任何变量都可以赋值。

另外为什么你会觉得静态变量需要释放空间?从哪里得到的错觉?

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-08 00:58
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
收藏
得分:0 
以下是引用renkejun1942在2017-9-8 00:58:21的发言:

除带有const修饰关键字的变量,任何变量都可以赋值。

另外为什么你会觉得静态变量需要释放空间?从哪里得到的错觉?

我的意思是局部静态变量在程序运行期间不会释放存储空间。在网上视频教程提到静态变量只能赋一次初值,(这里的赋初值与赋值是两个不同的意思?)问题修正一下。
问题1:变量(不是指静态变量)之所以能重复赋初值是不是因为变量在赋完初值后它的内存空间被释放了?所以使得变量可以重复赋初值.
问题2:而静态变量由于没有释放内存空间导致静态变量只能赋一次初值?
2017-09-08 02:26
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10566
专家分:43004
注 册:2014-5-20
收藏
得分:8 
“静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他 函数也用不了。由于被 static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。”
这样看看:
# include <stdio.h>

void fun()
{
    static int a=0;
    printf("%d\n", a);
    ++a;
}
main()
{
    int i;
    for (i=0; i<10; ++i)
        fun();
}
结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2017-9-8 05:52编辑过]

2017-09-08 05:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:8 
int a = 0; // 这个在C标准文档中称为 Initialization,中文叫 初始化
a = 0; // 这个在C标准文档中称为 Assignment operator,中文叫 赋值操作
局部static变量 和 局部非static变量 唯一的差别就是生存期不同。

所有的变量 ------ 不管有没有static修饰 ------ 都只能初始化一次。

如下代码
void foo( void )
{
    int s = 0;
}
int main( void )
{
    foo();
    foo();
}
s看起来被初始化了两次(每一次foo调用中被初始化一次),那只是因为两次初始化的s只是名字相同,不是同一个变量。


[此贴子已经被作者于2017-9-8 16:12编辑过]

2017-09-08 16:10
快速回复:关于局部静态变量
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012578 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved