大一c语言编程变量存储简单问题,求大神分析这三个程序的a,b最后为何不同以及这三个程序有啥区别,小

大一c语言编程变量存储简单问题,求大神分析这三个程序的a,b最后为何不同以及这三个程序有啥区别,小弟拜谢

图一)
swap函数中交换的是全局变量a,b。所以,回到main()函数中仍然是保留了交换的结果。

图二)
swap函数中与main()函数中分别使用了不同的同名变量(它们是互相独立的)。虽然它们的初值相同,被交换的是swap()中的变量a,b。main()中的a,b不受到影响。

图三)
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

swap()中操作的也是全局变量a,b。原理同图一。

全局变量也称为外部变量,它是在函数外部定义的变量。
它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。
只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。
但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的
结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。
有时需要在其他文件中使用extern来声明外部变量,以扩展外部变量的作用域。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-17
这个应该是一个变量的作用域别问题,第二张图里面,在swap()函数里面有定义局部变量ab,所以交换的是这两个局部变量的值,而主函数里面的ab不交换,第一和第三张图里面ab都是作为全局变量出现的,第一张是直接定义成的全局变量,第三是用了extern函数,extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义,在这个案例里它找到了位于主函数里面的ab。
第2个回答  2015-11-17
首先第一个图,因为a,b是全局变量,所以a,b值被改变追答

第二个图a,b为局部变量只在函数内有效,swap里面的a,b跟main里面a,b不是同一个,

extern 意思是在别处已经被定义了。找到的是之前定义的那个全局变量,

所以值被改变,