Excel不相邻列如何打印在一起-英雄云拓展知识分享
130
2023-11-01
【摘要】 本书摘自《C++程序开发案例课堂》一书中第6章,第2节,由刘春茂、李琪编著。
6.2 变量的作用域
上一节介绍了函数的基本知识,了解了函数的使用。那么,在调用函数的过程中,在函 数中使用的各种变量的作用范围是多大呢?下面来介绍函数中变量的作用域。
作用域规则告诉一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用 域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个 闭括号。也就是说,作用域由变量所在的最近一对括号确定。
6.2.1 局部变量
局部变量是指限制在某一范围内使用的变量。局部变量经常被称为自动变量,因为它们 在进入作用域时自动生成,采用堆栈方式分配内存空间,离开作用域时,释放内存空间,值 也自动消失。关键字 auto 可以显式地说明这个问题,但是局部变量默认为 auto, 所以没有必 要声明为 auto。
下面通过一个实例来说明局部变量的作用域。
在该函数中,首先定义int型变量y, 赋值为1;然
后y 自加1,最后将y 的结果输出。
运行结果如图6-6所示。
从结果来看,两次输出的 y 的结果是一致的。由于 y 是局部变量,第一次调用后,值变为2,此次调用后, y 被销毁,当再次调用时 y 再次被初始化为1,然后变为2。
6.2.2 静态局部变量
静态变量也是一种局部变量,在变量前面加上关键字 static, 那么这个变量就被定义为静 态变量。
通常,在函数中定义的局部变量在函数作用域结束时释放掉内存空间,那么该变量也就 随之消失了。当再次调用该函数的时候,会重新初始化局部变量,之后才可以使用。静态变 量与局部变量的不同之处在于,只要程序一直在执行,那么静态变量定义的值就一直有效, 不会随着函数的结束而消失。主要原因是,静态变量在内存中存放是有固定地址的,而不像 局部变量一样使用堆栈方式存取。
下面通过一个实例来说明静态局部变量的作用域。
6.2.3 外部变量
extern 告诉编译器存在着一个变量和函数,即使编译器在当前的文件中没有看到它,这个 变量或函数可能在一个文件或者在当前文件的后面定义。例如 extern int i, 编译器会知道i肯 定作为全局变量存在于某处。当编译器看到变量 i 的定义时,并没有看到别的声明,所以知 道它在文件的前面已经找到了同样声明的i。
当一个变量成为外部变量之后,不必再次为它分配内存就可以引用这个变量了。
下面通过一个实例来说明外部变量的作用域。
在该例中,首先声明了 max 函数,在主程序中,声明了全局变量 a 和 b, 接下来调用max 函数将 a 和 b 中较大的输出;定义外部变量 a 和 b, 分别赋值为15和-7;定义max 函数,求得最大值。
图6-8 使用外部变量
运行结果如图6-8所示。
从整个示例来看,输出结果为15。在main 函数后面定义了外部变量a 和 b, 但由于外部 变量定义的位置在函数 main 之后,因此如果没有程序的第6行,在 main 函数中是不能引用 外部变量 a 和 b 的。现在在main 函数第6行用extern 对 a 和 b 做了提前引用声明,表示 a 和 b 是将在后面定义的变量。这样在 main 函数中就可以合法地使用外部变量a 和 b 了。如果不 做 extern 声明,编译时会出错,系统认为 a 和 b 未经定义。 一般都把外部变量的定义放在引 用它的所有函数之前,这样可以避免在函数中多加一个extern声明。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~