| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 429 人关注过本帖
标题:小白问个局部变量的问题
只看楼主 加入收藏
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:8 
小白问个局部变量的问题
char x='A';
void fun1(char x)
{
 printf("\n 3.x=%c",x);
 x='C';
 printf("\n 4.x=%c",x);
}
void fun2()
{
 printf("\n 5.x=%c",x);
}
void main()
{
 char x;
 x='B';
 printf("\n 1.x=%c",x);
 fun1(x);
 printf("\n 2.x=%c",x);
 fun2();
}
最后的那个5.x=A,想不通
明明定义了x为全局变量,main中又定义了一次x,竟然没报错,想不通
全局变量没有初始化的时候,这个程序就报错,想不通
搜索更多相关主题的帖子: void void 
2011-08-14 17:07
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:0 
是不是在函数里先使用局部变量,再用全局变量?
2011-08-14 17:15
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:5 
局部变量可以覆盖全局变量,如果定义了全局变量,在某个块中(就是一对花括号之间)定义和全局变量同名的局部变量,那么在这个块中用的都是那个局部变量,只有在没有定义同名局部变量的程序段中使用的那个变量才是全局的。
2011-08-14 20:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
局部变量有优先权,同名声明,局部的x会屏蔽全局的x,除非你显式指定使用外部变量。

授人以渔,不授人以鱼。
2011-08-14 20:22
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:5 
main()函数内的x管不住fun2()内的x
fun1()中的x有个char传递,等于是在fun1函数内定义的局部变量,所以按局部变量走
fun2内的x没有局部定义,所以按全局变量走

A real warrior never quits.
2011-08-14 20:39
帝雪菲洛
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2011-8-14
收藏
得分:0 
5中的x为全局变量,在主函数中定义的x为局部变量,只在它所在的大括号内有效,即,只在主函数中有效。5所在的函数中用到x时,会先在自己函数的大括号中查找,显然没有,便会去大括号外查找,注,此时的大括号外就指的是全局变量了,他绝对无法进入其他函数的大括号中去找。
2011-08-14 21:33
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:0 
回复 4楼 TonyDeng
那么,如果我定义了全局变量x,main中也定义了局部变量x,我想在main中改一下全局变量的值,怎么办?
2011-08-15 06:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 7楼 lccwyj
在C中,你这个要求做不到,在C++中可以。通常,按照C的看法,你既然明知有全局变量存在,还要刻意在函数中声明一个同名的局部变量,明显意图就是希望屏蔽全局变量,此时没什么理由还要访问被屏蔽了的全局变量——如果两个变量都要用,为什么不使用不同的变量名呢,它们确实是两个不同的变量呀——因此它不提供这种实现途径。

[ 本帖最后由 TonyDeng 于 2011-8-15 09:48 编辑 ]

授人以渔,不授人以鱼。
2011-08-15 09:44
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:0 
回复 8楼 TonyDeng
哦,这是我从网上看到的一个题目,我只是很好奇为什么不报错。来问一下
2011-08-15 09:47
快速回复:小白问个局部变量的问题
数据加载中...
 
   



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

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