有以下程序,为什么2个printf输出的结果不一样

2025-03-24 03:03:44
推荐回答(1个)
回答1:

首先,这个问题涉及了一个问题:
1,全局变量被局部变量隐藏的问题
sub1函数是带有参数的,而且参数变量名与全局域的相同,虽然不会产生错误,但是,在sub1的区域中会隐藏掉全局域中的m,n变量,使用的是sub1带入的参数m,n;即在调用sub1函数时,使用的不是全局的m,n,不会改变全局域m,n,而是改变局部变量m,n;
sub2不带参数,使用的也是m,n,编译器会去寻找m,n,在全局域找到了,所以使用的是全局域的m,n,会改变全局域m,n

当sub1执行后,m,n是全局域的值1,2,所以输出是1,2
当sub2执行后,全局域m,n改变,所以输出是2,4

题主可以查下隐藏的概念(其实也就是弄清作用域的概念):
http://baike.baidu.com/link?url=Zd9C4acyErFdBL1AWL0ByMPXe2G8O8lBIhuSzUaRn3uJN7hxG_viavXlrNToZfg6QuoIPI3tIV0sohTBfhawya