标题:变量的全局作用域,请求
只看楼主
zflsky
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-3-25
 问题点数:0 回复次数:10 
变量的全局作用域,请求
根据下面的说法,我用VC++6.0得到的应该是6,6,但是我得到的却是6,0;都被搞糊涂了呀,请大侠指教!

全局作用域:
         对于具有全局作用域的变量,我们可以在程序的任何位置访问它们。当一个变量是在所有函数的外部声明,也就是在程序的开头声明,那么这个变量就是全局变量。

         void add(int);
         int num;

         main()
         {
             int n=5;
             add(n);
             printf("%d\n",num);     /*输出6*/
         }

         void add(num)         /*形式参数没有指定类型*/
         {
             num++;
             printf("%d\n",num);     /*输出6*/
         }

     上面的main()和add()里面,并没有声明num,但是在最后输出的时候却要求输出num,这是由于在程序的开始声明了num是全局变量,也就是在所有函数里都可以使用这个变量。这时候一个函数里改变了变量的值,其他函数里的值也会出现影响。上面的例子输出都是6,因为在add()函数里改变了num的值,由于num是全局变量,就好象它们两个函数共用一个变量,所以在main()函数里的num也随之改变了。
搜索更多相关主题的帖子: 全局作用 变量 num int add 
2008-04-19 13:34
now
Rank: 1
来 自:广州
等 级:新手上路
帖 子:544
专家分:0
注 册:2007-11-9
得分:0 
void add(int);//形参没有指定类型?

GIS
Geographic Information System
你在哪里?——》你的坐标?
2008-04-19 14:12
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
void add(num)         /*形式参数没有指定类型*/
这样不能通过编译的啊,形参必须有类型

至于结果是6 0的原因,是因为如果函数中有和全局变量同名的局部变量,那么在这个函数里边,全局变量被屏蔽.这也就是"内部屏蔽外部"

比如这个程序,在函数add中,形参名字是num,这是个局部变量,那么他将屏蔽掉全局变量的num
输出的时候,输出的其实是局部变量num的值,而且这个函数中,没有对全局变量num做任何修改

等到返回main函数的时候,由于没有同名的局部变量,所以main里面的num是全局变量,因为没有任何修改,而全局变量缺省初始值为0,所以这次输出的就是0

不知道你明白了吗?其实最主要的原因就是6个字,内部屏蔽外部

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-04-19 14:22
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
得分:0 
ye jiu shi 当定义相同的变量  局部变量 优先于全局变量 还有就是你的函数参数的问题

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-19 14:44
zflsky
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-3-25
得分:0 
那怎么样修改才能让函数add影响全局变量的值呢?
比如说,我要值呢没修改才能让输出结果是6,6
谢谢
2008-04-19 14:46
zflsky
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-3-25
得分:0 
难道要用传址调用
void add(int &num)     ; 我这样修改不行的啊
2008-04-19 14:54
asminfo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-4-19
得分:0 
void add(int);
         int num;

         main()
         {
             int n=5;
             add(n);
             printf("%d\n",num);     /*输出6*/
         }

         void add(int num1)         /*形式参数没有指定类型*/
         {
            num=num1;
            num++;
             printf("%d\n",num);     /*输出6*/
         }

以上程序就OK了,在你的ADD子函数里,num是一个局部变量.也就是说在定义子函数时,形参是一个局部变量,作用域为本函数内.
2008-04-19 14:59
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
得分:0 
想输出都是6??

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-19 14:59
zflsky
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-3-25
得分:0 
哦,有学到了好有用的东西,感谢啊
2008-04-19 15:04
asminfo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-4-19
得分:0 
客气.
2008-04-19 15:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-209920-1-1.html




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

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