Re: [课业] 资料处理

楼主: flydragon198 (Richard)   2014-10-25 00:51:42
C_and_CPP版是不错的程式版
※ 引述《flyyen ( )》之铭言:
: 请写出程式的输出结果
1: int a=5,b=10;
2: int main(){
3: int func();
4: extern int a;
5: int b;
6: a=b=6;
7: func();
8: }
9: int func(){
10: printf("%d%d",a,b);
11: }
: 输出结果: 610
为了方便,我加上行号
: 我的问题:extern int a;
: 从网络上找到的资料是说,此变量已在别处定义,告知程式到别的地方
: 寻找此变量。所以在主程式中,a一开始为5,之后被指定成6,再将a=6
: 及b=6带入func(),但print出来的结果怎么不会是66?
: 麻烦各位高手帮小弟解惑, 谢谢!
程式通常先弄可以编译执行,这样不论是要研究或者是找问题,都会比较容易
http://codepad.org/NR4Hqmwa
这题最主要是在考scope
在main外面宣告了两个a,b,然后在main里面宣告了一个b
我在这里用黄色代表main外面的a,b,红色代表main内的b
当呼叫func的时候,这里面所引用的a,b,是在main外面所宣告的a,b
不信你把外面宣告的b拿掉,你会发现编译不过,因为编译器找不到func()用的b
在第五行的 int b;,这里是宣告了一个main内优先使用的b
第六行的 a = b = 6; 这里改动的b是main内宣告的,而a则是外面宣告的a
因为第四行的extern int a;  这里意思是在main内,要用main外已经宣告的a
不信的话,你可以把这行改成int a;  答案会变成510
这里并没有更动到外面的b,其值还是10
所以当你呼叫 func()的时候,a的值是6,b的值依然是10
印出来就会是 6 10
作者: ARCHERDEVIL (开弓)   2014-10-25 10:06:00
正解
作者: flyyen ( )   2014-10-26 00:00:00
谢谢flydragon198大详细的说明
作者: controlfeng (controlfeg)   2014-10-26 01:11:00
高手

Links booklink

Contact Us: admin [ a t ] ucptt.com