| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1391 人关注过本帖
标题:[求助]有一道关于"static"程序题的输出结果我想不明白
只看楼主 加入收藏
ミつン戀ン
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-8-21
收藏
得分:0 
我才学完C..........学的还不是很深.不过我是经过专业培训的.编码规范什么的都还是有的

2006-08-22 00:17
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
以下是引用inku在2006-8-21 22:26:16的发言:
以下程序的输出结果是
int d=1;
fun(int p)
{ static int d=5;
d+=p;
printf("%d ",d);
return(d);
}
main()
{ int a=3; printf(\%d \n",fun(a+fun(d))); }
A: 6 9 9
B: 6 6 9
C: 6 15 15
D: 6 6 15
答案: C
我是这样想的,fun(d)=fun(1)=6 a+fun(d)=9 fun(9)=5+9=14,答案怎么会是c,怎么也想不通

第二次调用的时候,既调用fun(9)的时候,d=6(因为它刚刚已变为6),而不是5,至于为什么,最好去看看书,
关于静态static的作用............


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-08-22 00:20
ミつン戀ン
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-8-21
收藏
得分:0 
哟对对..没注意那..静态变量只初始化一次.后面的值都是上次调用的值

2006-08-22 00:24
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

對於全局變數與局部變數名字衝突, 我會用 命名空間標識符 區別
例如上面的 fun(a + fun(d)) 應該是 fun(a + fun(::d))


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-22 02:10
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-22 07:04
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
以下是引用yeshirow在2006-8-22 2:10:37的发言:

對於全局變數與局部變數名字衝突, 我會用 命名空間標識符 區別
例如上面的 fun(a + fun(d)) 應該是 fun(a + fun(::d))

这位姐姐可能忘了C中没有“命名空間標識符”


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-08-22 08:28
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

o, 原來是這樣啊...
C 和 C++ 混淆了..
---------------
那就應該按一些約定(當然不是必須的), 對於全局的, 則以 g_ 前綴開頭吧.
這樣有利於程式的調試啊


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-22 08:31
ridwsc
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2006-8-10
收藏
得分:0 

楼上的姐姐,你怎么打繁体字的
不知道的,以为你是台湾人呢,
或者说是海外的侨胞呢,嘿嘿嘿嘿


中国加油,加油,加油~~~~~ 我行~~我可以~~C
2006-08-22 08:33
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
以下是引用yeshirow在2006-8-22 8:31:34的发言:

o, 原來是這樣啊...
C 和 C++ 混淆了..
---------------
那就應該按一些約定(當然不是必須的), 對於全局的, 則以 g_ 前綴開頭吧.
這樣有利於程式的調試啊

象楼主这样的问题是教师故意而为,目的是让学生了解各类变量特性


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-08-22 08:36
Jackin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-8-22
收藏
得分:0 
1 首先运行内部的fun(d),此时d为全局变量,其值1传递给fun函数的参数p。
2 在fun函数内部,定义了一个静态变量d,这个变量从函数第一次调用时存在,到程序结束才消亡。
(注意:不是函数结束就消亡!)
3 由于静态变量d为5,则执行d+=p;语句后,d为6,打印6且返回6。
4 由于函数返回6,则执行fun(a+fun(d))时,实际参数值为9,故此时形式参数p的值为9。
5 进入函数体,程序忽略语句:static int d=5;。因为在第一次运行时,已经声明了这个变量。
故此时,该变量的值为上一次函数结束时的值, 为6!而不是5!
6 后面自然是6+9=15了!


可以认为:一个函数内部定义了一个静态变量,那么它只被定义一次,而且其值不随函数运行结束而
消亡。当下一次调用该函数时,静态变量的值保持上一次函数结束时的值。
2006-08-22 18:29
快速回复:[求助]有一道关于"static"程序题的输出结果我想不明白
数据加载中...
 
   



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

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