5.4.1 变量的作用域和生存期
在C语言程序中,不同函数中的变量可以同名,这些同名的变量分别代表内存中不同的存储空间,因此,编写程序时应注意区分这些变量,仔细分析在程序运行某个具体时刻是哪个具体的变量在起作用(如例5.13)。
例5.13
程序如下:
程序运行结果如下:
在上述程序中,main函数中的i和f函数中的i尽管同名,但仍然是两个不同的变量,只在定义它们的函数内有效,因此程序运行结果为i=5。
为了完全把握程序的运行过程,C语言程序规定应分别从变量作用域和生存期来考察变量的具体值。其中,变量的作用域是指某个变量在程序中起作用的范围,即该变量在程序正文中合法有效的区域。变量的生存期是指从系统开始为某个变量分配存储空间到释放该存储空间的这段时间。如例5.13中的main函数和f函数里的变量i的作用域分别在各自的函数里,因此每个i都只能在各自的函数里起作用,不能把自己的值传给对方;这两个变量i的生存期也不一样长,f函数里的i的生存期从调用f函数开始直到f函数调用结束,main函数中的i的生存期要长一些,是整个程序的执行期。根据变量的作用域可以将其分为局部变量和全局变量。
1.局部变量
局部变量也称内部变量,是指在函数内部或复合语句内定义的变量,它只在该函数或复合语句内有效。也就是说,只有在包含变量说明的函数内部或复合语句中,才能使用被说明的变量,在此之外就不能使用这些变量。如例5.14。
例5.14
说明:
①main函数中定义的局部变量,只能main在函数中起作用,在其他函数中不起作用。同样,在main函数中也不能直接使用其他函数定义的局部变量。
②函数的形参变量是局部变量,只在被调用函数内有效。
③允许在不同的函数中使用相同的变量名,分别代表不同的对象,分配不同的存储单元,互不干扰。
④在复合语句中可定义变量,其作用域只在该复合语句范围内。
2.全局变量
全局变量也称外部变量,是指在函数之外定义的变量,可以为本文件中其他函数所共用,其有效范围是从定义变量的位置开始到本源文件结束。如例5.15。
例5.15
程序如下:
程序运行结果如下:
说明:
①全局变量可加强函数模块之间的数据联系,但过度使用全局变量将降低函数的独立性,如果在一个函数中改变了全局变量的值,就会影响到其他函数,从模块化程序设计的观点来看这是不利的,因此在程序中应尽量少使用全局变量。
②由于函数调用只能带回一个返回值,有时可以利用全局变量从被调函数处得到一个以上的返回值。
④在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量将暂时被屏蔽而不起作用。
例5.16
程序如下:
程序运行结果如下:
5
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。