| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 630 人关注过本帖
标题:有谁可以帮忙解答一下(运行结果为什么是6,还有static有什么特性)
只看楼主 加入收藏
心雨123aa
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:55
专家分:38
注 册:2010-3-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
有谁可以帮忙解答一下(运行结果为什么是6,还有static有什么特性)
#include<stdio.h>
fun(int x)
{
    static int a=3;
    a+=x;
    return(a);
}
main()
{   
    int k=2,m=1,n;
    n=fun(k);
    n=fun(m);
    printf("%d",n);
}
运行结果是6
搜索更多相关主题的帖子: 结果 解答 运行 static 特性 
2010-03-28 13:51
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:10 
static 里面定义的一个静态的局部变量a
从程序开始到结束它一直存在的 它是保存在全局数据区的
 
当第一次进入fun函数时 a的值是3 3+2=5

第二次进入时 a的存储空间依然存在 并没有消亡 a=5 然后加1 所以为6

这个时候再去运行fun的话 a的存储空间的值是6

百度都有的 多学会自己查找问题
2010-03-28 14:11
gwpp
Rank: 2
等 级:论坛游民
帖 子:2
专家分:65
注 册:2010-3-28
收藏
得分:5 
用static定义的变量属于静态变量,也就是在整个程序的生存期内只被创建一次,即当程序执行时创建,而在结束的时候被销毁(而动态变量是在每次函数调用的时候创建,在函数执行结束的时候销毁。而静态变量不管函数调用不调用它都与整个程序是共同存在的,因此每次调用函数对其值进行修改是对前一次修改的累计,它是独立存在的,不随函数的执行结束而被销毁,而是与整个程序同寿)。其执行的内部原理是:动态变量是在堆栈进行分配和释放内存的,而静态变量是在数据段分配和释放的。


2010-03-28 14:16
hzh512
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:234
专家分:1333
注 册:2009-6-5
收藏
得分:5 
可以反汇编看一下,a是放在堆里的,所以在子函数执行完了后,他不会释放掉,调试时可以追踪地址,看地址是否变了。(如果是动态的,一般会变)

info from CSDN
声明静态变量的,静态变量只能被初始化一次,如果不初始化的话编译器自动将其设置为0,静态变量分为全局静态变量和局部静态变量2 种,前者在整个程序中可见,后者在特定函数或语句中可见 .
 1、函数之外的变量就是全局变量,这个想法正确吗?   
 答:   在C中,完全正确。只不过按有没有加static修饰可以分为静态全局变量和一般全局变量两种。   
 2   如果在全局变量的前面加上static   会有什么用?   
 答:在C中,静态全局变量意味着两个方面。一、在生命期方面,它与一般全局变量一样,是与整个程序共存亡的;二、在可见性方面,它只在定义它的那个编译单元中可见。比如说,你在testA.c中定义了一个静态全局变量x:   static   int   x;则你只能在testA.c的函数中引用它,在另一个文件testB.c中如果想用它的话:extern   int   x;然后再某个函数中使用x,则一般编译器在连接阶段会报错说找不到x这个符号。   
3   如果在函数的前面加上static   会有什么用?   
答:与静态全局变量差不多。简单地说,在testA.c中定义的静态函数:static   void   A(void)是不能在testB.c的函数中调用的,如果一定要这样的话编译器连接时会报错的。   
   
          static的用途:一般对那些非接口函数和确定外部不使用的全局变量加上static限制,可以保证不会被其它编译单元非法使用,同时也可以避免与别的编译单元中的同名符号冲突。在驱动程序中用的较多。

编程=用几种语言在某个或几个平台上通过抽象思维运用一系列算法来解决现实中问题的手段
2010-03-28 14:17
心雨123aa
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:55
专家分:38
注 册:2010-3-28
收藏
得分:0 
回复 2楼 hahayezhe
初学c语言......谢谢啦!!
2010-03-28 14:31
快速回复:有谁可以帮忙解答一下(运行结果为什么是6,还有static有什么特性)
数据加载中...
 
   



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

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