我知道!字很多,但一定要耐下心来仔细看!因为!全程无废话,讲解全局,局部变量和形、实参的区别!
1.全局变量和局部变量
(1)全局变量
①定义:主函数中定义的变量只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。
②注意事项:
- 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。
- 使用全局变量过多会降低程序的清晰性。在各个函数执行时都可能改变外部变量的值,程序容易出错,因此要有限制地使用全局变量(初试时尽量不用).
- 因为函数在执行时依赖于其所在的外部变量,如果将一个函数移到另一个文件中,那么还要将有关的外部变量及其值一起移过去。然而,如果该外部变量与其他文件的变量同名,那么就会出现问题,即会降低程序的可靠性和通用性.C语言一般要求把程序中的函数做成一个封闭体,除可以通过“实参→形参”的渠道与外界发生联系外,没有其他渠道.所以不建议使用全局变量。
(2)局部变量
①定义:在一个函数内部定义的变量称为局部变量.它只在本函数范围内有效,即只有在本函数内才能使用这些变量,故称局部变量。
②注意事项:
- 主函数中定义的变量只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。
- 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。
- 形式参数也是局部变量。
- 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称“分程序”或“程序块”.例1.1中的 int j=5就是如此,只在离自己最近的花括号内有效,若离开花括号,则在其下面使用该变量会造成编译不通.
- 注意一个细节, for循环的小括号内定义的int i,在离开for循环后,是不可以再次使用的.
(3)整体分析
全局变量存储在数据段,所以main函数和 其他函数都是可见的.全局变量不会因为某个函数执行结束而消失,在整个进程的执行过程中始终有效,因此工作中应尽量避免使用全局变量!我们在函数内定义的变量都称为局部变量,局部变量存储在自己的函数对应的栈空间内,函数执行结束后,函数内的局部变量所分配的空间将会得到释放.如果局部变量与全局变量重名,那么将采取就近原则,即实际获取和修改的值是局部变量的值.
2.形参和实参:
(1)定义函数中指定的形参,如果没有函数调用,那么它们并不占用内存中的存储单元。只有在发生函数调用时,函数中的形参才被分配内存单元.在调用结束后,形参所占的内存单元也会被释放.
(2)实参可以是常量、变量或表达式,但要求它们有确定的值,例如, print(i+3)在调用时将实参的值 i+3赋给形参。print函数可以有两个形参,如print(int a,int b)
(3)在被定义的函数中,必须指定形参的类型。如果实参列表中包含多个实参,那么各参数间用逗号隔开。实参与形参的个数应相等,类型应匹配,且实参与形参应按顺序对应。
(4)实参与形参的类型应相同或赋值应兼容.
(5)实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回给实参.在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。
(6)形参相当于局部变量,因此不能再定义局部变量与形参同名,否则会造成编译不通。
结束~