课程首页 › 第5部分 › 第75课

第75课 我和你一样却不一样

第5部分 功能的复用 · 函数· 知识点:全局与局部

我和你一样却不一样(全局与局部)

我设计了一个计算圆面积和圆周长的函数,让它们一起探索一下变量的作用域。π是一个恒定不变的值,直接声明为常量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)阅读以下程序,填写程序运行后的输出结果。

插图

输出: