文档详情

华南农业大学C语言第7章 函数.ppt

发布:2019-04-06约1.19万字共56页下载文档
文本预览下载声明
7.6 局部变量与全局变量 一般来说,C语言程序可以在程序中以下地方定义变量: (1) 函数体的开头部分。 (2) 函数头部中的形式参数变量。 (3) 函数体内部的复合语句中。 (4) 函数的外部。 根据变量在程序中定义位置,可以将变量分为“局部变量”和“全局变量” 局部变量:在函数内部定义的变量。 函数体开头部分 函数头中的形式参数 函数体内复合语句 局部变量的作用域 从该变量的定义语句开始到包含该变量定义语句的最内层的右大括号结束为止。 全局变量:函数外部定义的变量。 全局变量作用域 起点是变量定义的位置,终点是其所在的源程序文件的结束。 例7-12:定义一个一维数组,其中存放从键盘输入的10个学生的考试成绩,定义一个函数,当main函数调用此函数后,能够得到考试成绩的最高分、最低分和平均分。 #include stdio.h double max, min; double average(double array[], int n); int main() { double scores[10], aver; int i; printf(输入10个学生的成绩: \n); for(i=0; i10; i++) scanf(%lf, scores[i]); aver = average(scores, 10); printf(最高分:%.2f\n,max); printf(最低分:%.2f\n,min); printf(平均分:%.2f\n,aver); return 0; } /* average函数求出最高分、最低分放在全局变量中; 平均分为返回值 */ double average(double array[], int n) { double sum = 0; int i; max = min = array[0]; //全局变量的值设为第1个成绩 for(i=0; in; i++) { if(array[i] max) max = array[i]; //更新最高分 if(array[i] min) min = array[i]; //更新最低分 sum = sum + array[i]; //累加求和 } return sum/n; //返回平均分 } 输入10个学生的成绩: 89 95 87.5 99 68.5 96 59 85 73 90回车 最高分: 99.00 最低分: 59.00 平均分: 84.20 7.7 变量的存储方式 C语言中,供用户程序运行使用的内存空间分为三个部分: 程序区存放可执行的程序指令。 静态存储区存放程序运行期间占用固定内存单元的变量,包括程序中定义的全局变量、静态局部变量(static)等。 动态存储区存放程序运行期间根据需要动态分配存储单元的变量,包括程序中定义的非static的局部变量、函数的形式参数等。 C语言中变量的存储类别具体可以分为4种: 自动(auto) 静态(static) 寄存器(register) 外部(extern) 局部变量的存储类别 (1) 自动局部变量 函数中的局部变量,如果没有特别声明为static(静态)存储类别,都是由系统动态地分配和释放内存空间,变量存放在动态存储区中,称为自动变量。函数中的形参也属于自动变量。使用关键字auto说明, auto可以省略。 (2) 静态局部变量 如果希望函数中局部变量的值在函数调用结束后仍然保留原来的值,即系统不释放变量占用的内存空间,在下一次函数调用时,该变量保持上一次函数调用结束后的值。此时应该使用static关键字把局部变量说明成静态存储方式。 例7-13:观察静态局部变量与自动局部变量的区别 #include stdio.h void func1(); void func2(); int main() { printf(调用函数func1三次:\n); func1(); func1(); func1(); printf(调用函数func2三次:\n); func2(); func2(); func2(); return 0; } void func1() { int num = 0; num = num + 1; printf(num = %d\n, num); } void func2() { static int num = 0; num = num + 1; printf(num = %d\n, num); } 调用函数func1三次: num = 1 num = 1 num = 1
显示全部
相似文档