与局部变量的概念相对的是全局变量,全局变量定义在所有的函数体之外,它们在整个程序开始之前分配存储空间,在程序结束时释放存储空间,所有函数都可以通过全局变量名访问它们。
例10.4:全局变量的使用
运行结果如图10.3所示。
图10.3 例10.4程序运行结果
全局变量在整个程序的所有函数中都可以访问,所以在整个程序运行过程中全局变量被读写的顺序从源代码中看不出来(源代码的书写顺序并不能反映函数的调用顺序),出现了Bug往往就是因为在某个不起眼的地方对全局变量的读写顺序不正确,如果代码规模很大,这种错误是很难找出来的。对于局部变量的访问不仅局限在一个函数内部,而且局限在一次函数调用之中,从函数的源代码也很容易看出访问的先后顺序是怎样的,所以比较容易找到Bug。因此,虽然全局变量用起来很方便,但一定要慎用,能用函数传参代替的就不要用全局变量。
如果全局变量和局部变量重名了会怎么样呢?如果上面的例子改为:
例10.5:作用域示例。
输出结果如图10.4所示。
图10.4 例10.5程序运行结果
显然在main方法中输出的是在main方法中定义的局部的hour和minute;而在print_time中输出的是全局的minute和hour。在C语言中,每个标识符都有特定的作用域,全局变量是定义在所有函数体之外的标识符,它的作用域从定义的位置开始直到源文件结束,而main函数局部变量的作用域仅限于main函数之中。也就是说当一个函数中可以使用全局变量也可以使用局部变量时,全局变量被隐藏了!
通过本章的学习,我们掌握了如下知识点:
➢为什么使用函数?为了减少代码冗余,增强代码的可读性,提高程序的可维护性。
➢什么是函数?函数是一个独立的子程序,由相关代码组成,能完成一定的功能,能重复多次使用。
➢函数的分类:可按不同角度分类。我们主要从函数的定义来分:库函数和用户自定义函数。
➢函数的三大特征:函数名、函数返回值以及参数类型和数目。
➢定义一个函数分为有参和无参两种形式。
➢参数的类型:形式参数与实际参数。
➢函数的返回值:就是return语句返回的值。
➢调用函数:“返回值类型变量名=函数名(参数值1,参数值2…参数值n);”。
➢局部变量是在每次函数调用时分配存储空间,每次函数返回时释放存储空间。
➢全局变量在整个程序开始之前分配存储空间,在程序结束时释放存储空间,所有函数都可以访问。(www.xing528.com)
1.用函数打印直角三角形,用户输入几行,就打印几行。如:输入7,运行效果如图10.5所示。[函数定义:void getSquare(int num){}]
图10.5 输出直角三角形
2.输出一个数字的绝对值,用函数完成。运行效果如图10.6所示。[函数定义:int getZheng(int num){}]
图10.6 输出数字绝对值
3.判断输入的字符是大写字母还是小写字母,用函数完成。运行效果如图10.7所示。[函数定义:void change(char ch){}]
图10.7 判断输入字符是大写字母还是小写字母
4.根据边长计算正方形的周长及面积,用函数完成。运行效果如图10.8所示。[函数定义:double getArea(double c){}和double getGirth(double c){}]
图10.8 计算面积和周长
5.用函数打印菱形,运行效果如图10.9所示。[函数定义:void show(){}]
图10.9 打印菱形
1.根据用户输入的年份和月份输出该月的天数,用函数完成。运行效果如图10.10所示。[函数定义:int getDay(int year,int month){}]
图10.10 判断天数
2.找出两个数中的最大值,用函数完成。运行效果如图10.11所示。[函数定义:int getMax(int num1,int num2){}]
图10.11 输出最大值
3.根据输入的秒数,输出对应的分钟数和小时数,用函数完成。运行效果如图10.12所示。[函数定义:void getTime(int second){}]
图10.12 计算分钟数和小时数
4.根据边长计算长方形的周长及面积,用函数完成。运行效果如图10.13所示。[函数定义:void getArea(double w,double h){}]
图10.13 计算长方形的面积和周长
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。