| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2705 人关注过本帖
标题:被调用函数结束时,形参会保留还是初始化。
只看楼主 加入收藏
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:22 
被调用函数结束时,形参会保留还是初始化。
程序代码:
#include <stdio.h>
int a=2;
int f(int m)
{ static int n;
  n=0;n++;a++;
  return n+m+a;
}
main()
{
  int k;
  for (k=0;k<4;k++)
  printf("%d,",f(k));
}


下面是我的理解以及疑问:
    a是全局变量,当f函数第一次被调用结束后,a的值会变为3吗&每调用一次就自增一次吗&在f函数之外a会变吗?
    n是静态局部变量只定义一次,“static int n=1;”不管这个f函数被重复调用几次,n只进行一次赋值。但是这边是“static int n;n=0;”我的理解是f函数被调重复用几次,n每次都要重新被赋值为0。对吗?
2014-09-07 14:17
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
    a是全局变量,当f函数第一次被调用结束后,a的值会变为3吗


每调用一次就自增一次吗


在f函数之外a会变吗?
如果有自增操作 是会变的

    n是静态局部变量只定义一次,“static int n=1;”不管这个f函数被重复调用几次,n只进行一次赋值。但是这边是“static int n;n=0;”我的理解是f函数被调重复用几次,n每次都要重新被赋值为0。对吗?


我的理解 欢迎批评指正
2014-09-07 14:46
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
收藏
得分:0 
回复 2 楼 zklhp
f函数对a进行了自增,是不是全局a的值就变了。 怎么说呢,就是:这个函数运行结束后,全局变量a的值是不是就变成6了?
2014-09-07 15:04
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:6 
为什么不自己测验一下呢?自己跑一下程序,理解才深。

想抽苏烟了。
2014-09-07 15:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
为什么会概念不清呢?是书上没讲明白?能让看看你看什么书吗?

[ 本帖最后由 TonyDeng 于 2014-9-7 15:45 编辑 ]

授人以渔,不授人以鱼。
2014-09-07 15:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1楼的代码没有全局变量,a和n都是静态(static)变量,范围不同而已。

授人以渔,不授人以鱼。
2014-09-07 15:58
Coincedence4
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:52
专家分:151
注 册:2014-9-4
收藏
得分:4 
看变量的存储类型就行了,存储类型说明了生存期,静态的一直占用内存单元直到程序运行结束才释放空间,所以在程序程序结束之前会保存上次的值。
2014-09-07 16:51
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
收藏
得分:0 
回复 4 楼 fl8962
没装,初学者,自己在看。
2014-09-07 17:06
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
收藏
得分:0 
回复 5 楼 TonyDeng
你学一门新知识,光看书就会了?一点问题都不会有?能把所有细节都记住?静态变量,全局变量,我也只是看到例题解析中出现我才百度了一些基本的信息。你要明白这边是遇到问题让大家来解决的,不是让你来倚老卖老的。
2014-09-07 17:18
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:0 
“n是静态局部变量只定义一次,“static int n=1;”不管这个f函数被重复调用几次,n只进行一次赋值。”

准确地来说:n只进行一次初始化,再次调用该函数时,该语句就不在执行,n保留上一次调用结束后的值。


“没装,初学者,自己在看。”

如果仅仅只是看书,而不上机实践,那么你永远都没办法学好这门语言!


“你要明白这边是遇到问题让大家来解决的,不是让你来倚老卖老的。 ”

第一:T版并没有任何倚老卖老的嫌疑,你可以对他的答案质疑,但语言要得体。从他所说的话,我没有看到 有哪怕一个字的不耐,相信广大坛友也是这样认为,所以 请 不要带上这种具有 人身攻击性 的词
第二:遇到的问题 是 你自己 的问题,而不是 我们的 问题。所以 你在论坛上提出问题,如果你想要获得让自己理解更深的答案,你就需要展示出你付出过多么大的努力,让我们觉得回答你这个问题是值得的。而你 毫无理由的指责他人,先不说其他,首先让他人对你的好感下降,即使你在这次获得了想要的答案,但下次,估计就没几个人想要回答你的问题。
就说这么点,听不听由你

坚持----------------------------------唯一的道路
shit ! ! !
2014-09-07 18:57
快速回复:被调用函数结束时,形参会保留还是初始化。
数据加载中...
 
   



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

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