| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2705 人关注过本帖
标题:被调用函数结束时,形参会保留还是初始化。
只看楼主 加入收藏
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:0 
以下是引用TonyDeng在2014-9-7 15:58:28的发言:

1楼的代码没有全局变量,a和n都是静态(static)变量,范围不同而已。

为什么说a是静态变量呢?

坚持----------------------------------唯一的道路
shit ! ! !
2014-09-07 18:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 11 楼 wssy213
语言规定就是这样的,那叫文件级的静态数据,可见性只在本文件(模块)中。在单个文件程序中,它与全局数据等效,但在多模块程序中,除非别的模块用extern引用这个变量,否则是看不到这种数据的(现在该明白头文件.h中经常写出extern的用途了)。可见性跨模块的数据和代码,才是全局性的。


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

授人以渔,不授人以鱼。
2014-09-07 21:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
静态(static),正式称呼是“静态存储时间”,意思是指这种变量是长期存在的。可见性是另一回事,具有静态存储时间的数据,可见性也可以是不同的,这种变量也有代码块内、函数内、文件内各种不同的可见性。全局变量实际上是文件层级的静态存储时间变量,而且其可见性跟声明位置有关,只有在这种变量声明后面的代码才可见。

授人以渔,不授人以鱼。
2014-09-07 23:42
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
收藏
得分:0 
回复 10 楼 wssy213
你看不到5楼么?你的电脑自动忽略了?那我复制粘贴给你看    “为什么会概念不清呢?是书上没讲明白?能让看看你看什么书吗?”
2014-09-08 09:15
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
收藏
得分:0 
回复 10 楼 wssy213
我只想问,你高考数学学了多久做了多少数学题,那你考了满分了吗? 如果只给你高中5本数学教科书让你自己看,你还能考几分?一样的道理,学一门知识不是看看书就能会的,何况是初学。“就像前不久看到只能实参传递给形参值,后来遇到反例,矛盾。网上查才知道,指针变量会改变实参的值,还有一种情况也会改变,不记得了。”一个算法可能涉及很多方面的知识,但你看书学习,不可能面面俱到,更不可能面面都弄得透彻,这就是所谓的问题。 不是问几句“为什么会概念不清呢?是书上没讲明白?能让看看你看什么书吗?”就能显的自己高大上的,连学习最基本的过程常识都不懂还谈什么...。以上是解释“5楼三连问”句子。  
    看了你一二两排的解答,首先说句谢谢,谢谢你的回答;其次建议你去上面把我的疑问看清楚下下。而对于下面回答的文字游戏我就不玩了。
    表达个个人观点:“玩小号有的时候很有意思,但有的时候真的一点意思都没有,特别是玩的不好被看出来的时候。”你觉得呢???

[ 本帖最后由 Super夜煞 于 2014-9-8 09:58 编辑 ]
2014-09-08 09:57
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
Tony你又装漏了吧。

楼主定义的变量a就是全局变量,你最好再看看书弄清楚变量定义与变量声明的区别。

extern是用于声明的,在文件外访问全局变量当然要先声明了。

真正的你想表达的文件级变量需要再加上static关键字,这样在文件外即使用extern声明也不能访问。

变量如此,函数亦如此。

你的装估计是改不了了,但还是尽量谨慎些,这么多年了你的水平没什么长进,性格亦是。

重剑无锋,大巧不工
2014-09-08 10:26
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
楼主,你可以在每个变量被调用结束后加上适当的printf();getchar()组合语句,把这个变量输出,没输出一个需要按任意键程序才继续,这样你就可以清楚追踪每个变量的变化情况了。会更加清楚代码的执行过程。

代码测试环境:  WinXP+C-Free5.0.
2014-09-08 13:35
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:0 
回复 15 楼 Super 夜煞
在学习过程中,的确会遇到各种各样的问题,这些问题有可能是看书无法解决的,这就需要其他的途径来解惑,就比如上论坛询问。在这一点上我是赞成的。&lt;br&gt;&lt;br&gt;在回答你的问题时,每个人的见解可能不同,所以给你的答复自然就可能不同,但有一点是明确的:不会因为你是初学者抑或者是其他原因而贬低你,也不会因为你学富五车而奉承你,每个人都会在这得到公平的待遇和尊重。所以别人尊重你,你自然也要尊重别人,这是原则问题。&lt;br&gt;再回到这个问题上,你的见解既然和T版不同,大可以去反驳他,但这一切的前提,要遵守原则。<br>另外,若认为这是马甲,可以找管理员,他会给你想要的答案

[ 本帖最后由 wssy213 于 2014-9-8 14:03 编辑 ]

坚持----------------------------------唯一的道路
shit ! ! !
2014-09-08 13:59
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
收藏
得分:0 
回复 18 楼 wssy213
    最后一次为这事回复:
    首先,没有人贬低我,我也没说过需要什么奉承!!至于你说的尊重,我并没有不尊重任何一个人,没有脏话,更没有利用字体颜色来暗自讽刺。我一直恪守着自己的原则。(如果你拿‘倚老卖老’来说事,请看下一条)
    其次,你从哪里看到我和他出现‘见解不同’的问题了,请不要一而再再而三的忽略一句话(定义这句话为A),我这里也最后复制一次给你看A=“为什么会概念不清呢?是书上没讲明白?能让看看你看什么书吗?”这是他5楼的全部回复。看的懂吧?在我看来这一行为就是‘倚老卖老’,你非要说不是,非要说我不尊重他人,甚至你还说过我‘人身攻击性’这词。你可以测试,很简单,把这句话A回复给所有问问题的帖子上,看看这些楼主的反应。
    最后,我不需要找什么管理员,我心里有我的答案,我不需要他给我,他给不给我对我来说没什么意义,还浪费时间。
    我是初学者,以后还会有很多问题,也希望并欢迎你出于答疑解惑的目的来帮我。如果还是类似话语A的句子,那请右上角。或许我们不能给别人带来方便、快乐,但我觉得至少能不给他人带去不快,不是吗!
这事儿就当是你我见解的不同,没必要也不会再说什么了。
2014-09-08 17:29
Super夜煞
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-9-7
收藏
得分:0 
回复 17 楼 vvvcuu
哇靠,眼前一亮的感觉,好方法,谢谢谢谢,具体的运用这种方法我去网上度一度,这方法肯定会很有用,真的很谢谢了。
2014-09-08 17:36
快速回复:被调用函数结束时,形参会保留还是初始化。
数据加载中...
 
   



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

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