第5章函数(2数组作参数、变量的作用域和存储类别).pptVIP

  • 3
  • 0
  • 约1.18万字
  • 约 40页
  • 2017-06-10 发布于北京
  • 举报

第5章函数(2数组作参数、变量的作用域和存储类别).ppt

⑴ 静态存储方式的数据: ☆ 全局变量 ☆ 静态局部变量 特点:在程序编译时分配内存单元,在整个程序执行期间占据固定存储单元,直到程序执行完毕才释放。 ⑵ 动态存储方式的数据: ☆ 函数的形式参数 ☆ 自动变量 ☆ 函数调用时的现场保护和返回地址等。 特点:函数调用时分配动态存储空间,函数调用结束时释放这些空间。即:动态分配和释放。 二、 auto变量 自动变量:用关键字auto作存储类别的声明。 在函数中定义的变量 自动变量 函数的形参 在复合语句中定义的变量 特点:在调用该函数时,系统给变量分配存储空间,函数调用结束时自动释放这些空间。 例如: int f(int a) { auto int b, c = 3; …… { int z; z = a + b; } } 说明:关键字“auto”可以省略不写(隐含指定为自动变量)。 例如: auto int b, c = 3; int b, c = 3; 三、 用static声明局部变量 静态局部变量: ⒈ 特点:函数中的局部变量的值在函数调用结束后不消失而保留原值,即其所占用的存储单元不释放,在下一次调用该函数时,该变量已有值,就是上一次函数调用结束时的值。 ⒉ 声明:(用关键字static进行声明) static 类型标识符 变量名 例如: static float a; 例 1: 考察静态局部变量的值。 #include stdio.h int f(int a) { int b = 0; static int c = 3; b = b + 1; c = c + 1; return (a + b + c); } int main(void) { int a = 2, i; for (i = 0; i 2; i++) { printf(“%d”, f(a)); } return 0; } 运行结果:? i=0 函数调用开始 函数调用结束 2 a 0 b 3 c 4 c 1 b 2 a 5 c 1 b 2 a 2 a 0 b 4 c i=1 函数调用开始 函数调用结束 关于静态局部变量的说明: ☆ 如在定义静态局部变量时不赋初值,编译时自动赋初值0 (对数值型数据)或空字符(对字符变量)。而对自动变量来说,如果不赋初值,它的值是一个不确定的值。 ☆ 静态局部变量仍属于局部变量,其它函数不能引用它。 例如: 对静态局部变量: static int a; (a=0) static float b; (b=0.0) static char c; (c=‘\0’) 对自动变量: int a; (a的值不确定) float b; (b的值不确定) char c; (c的值不确定) #include stdio.h double fac( ); int main(void) { int i, n; double Sum = 0; printf(Please input n: ); scanf(%d, n); 例2:P824.C 静态变量的应用:求阶乘运算 for (i = 1; i = n; i++) { Sum += 1 / fac( ); } printf(\nS=1/1!+1/2!+...+1/%d!=%.16f\n, n, Sum); return 0; } double fac( ) { static int i = 1; static double p1 = 1.0; p1 *= i; i++; return p1; } 课堂练习 1.以下程序的输出结果是( )。 #include stdio.h int d = 1; int fu

文档评论(0)

1亿VIP精品文档

相关文档