第75课 我和你一样却不一样
我和你一样却不一样(全局与局部)
我设计了一个计算圆面积和圆周长的函数,让它们一起探索一下变量的作用域。π是一个恒定不变的值,直接声明为常量const float pi=3.14,写在程序最外层。这就是一个全局变量,在程序中可以随处访问。
关于圆

运行程序:
输入:
输出:
圆面积是:12.56
圆周长是:62.8
(1)const float pi=3.14,是声明在所有函数之外的变量,我们称之为全局变量,程序中所有函数都可以使用它,无论是area()、perimeter()还是main(),pi的有效范围都是从声明它开始到程序结束。
(2)定义了两个函数,area()负责计算面积,perimeter()负责计算周长,它们都会将计算结果返回。
函数area():
float area(float radius){
radius=2; return pi*radius*radius;}
输入一个浮点数参数,计算后返回一个浮点数。
函数perimeter():
float perimeter(float radius){
return 2*pi*radius;}
输入一个浮点数参数,计算后返回一个浮点数。
(3)调用函数,将参数传入函数,将返回值输出。
cout<<"圆面积是:"<<area(radius)<<endl; cout<<"圆周长是:"<<perimeter(radius)<<endl;运行程序:
输入:
输出:
圆面积是:12.56
圆周长是:62.8
提出思考
在函数area(radius)执行时,radius=2不是将radius的值改成了2吗,为什么周长的计算还是用的10呢?
还记得变量作用域吗?area()中的radius只能作用于函数自己,并不能作用于area()以外的部分,所以area()内部的改变并没有影响主函数main()中的变量radius。
因此,perimeter(radius)传参传入的是main()函数中的变量radius,值为10。
虽然变量名都是radius,但却是两个完全不同的变量,就像两个名字相同的人,虽然名字相同,但人却完全不同。

划重点
在函数外部定义的变量称为全局变量,在函数内部定义的变量称为局部变量。
全局变量可以全程序范围内使用。
局部变量
(1)局部变量只在定义它的函数内有效。
(2)局部变量之间相互不干扰,分别代表不同的含义。
(3)当局部变量和全局变量重名时,在函数范围内局部变量可以屏蔽全局变量。
循环中的局部变量,两个i互不干扰。


巩固练习
(1)在C++中,全局变量的作用域是什么?()
A.全局变量只在定义它们的函数内部可见
B.全局变量在整个程序中都可见,可以在任何地方访问
C.全局变量只在包含它们的循环中可见
D.全局变量在主函数中可见
(2)在C++中,全局变量和局部变量可以具有相同的名称吗?()
A.可以,不会引发问题
B.不可以,会导致编译错误
C.只有在主函数中才能具有相同的名称
D.只有在不同的函数中才能具有相同的名称
(3)阅读以下程序,填写程序运行后的输出结果。

输出:
