C语言程序设计(第二版)课件作者王曙燕章节ap7函数.pptVIP

  • 3
  • 0
  • 约2.28万字
  • 约 81页
  • 2017-11-12 发布于广东
  • 举报

C语言程序设计(第二版)课件作者王曙燕章节ap7函数.ppt

func(int n) { auto int a=2; a+=2; ++n; printf(func:n=%d a=%d\n,n,a); } main() { int a=0; func(1); printf(main:n=1 a=%d\n,a); a+=10; func(2); printf(main:n=1 a=%d\n,a); } 运行结果: func: n=2 a=4 main:n=1 a=0 func: n=3 a=4 main:n=1 a=10 2.静态变量(static类别) 除形参外,局部变量和全局变量都可以定义为静态变量。 局部静态变量(或称内部静态变量) 全局静态变量(或称外部静态变量) 静态变量 静态变量 static int a; main( ) { float x,y; … } f( ) { static int b=1; …… } 全局静态变量 局部静态变量 自动变量 不能省 ⑴ 内存分配 编译时,将其分配在内存的静态存储区中,程序运行结束释放该单元。 ⑵ 静态变量的初值 若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值 。 ⑶ 生存期 整个程序的执行期间。 ⑷ 作用域 局部静态变量的作用域是它所在的函数或分程序.全局静态变量的作用域是从定义处开始到本源文件结束。 静态变量 int n=1; func() { static int a=2; a+=2; ++n; printf(func:n=%d a=%d\n,n,a); } main() { static int a; /*静态局部变量初始化为0*/ printf(main:n=%d a=%d\n,n,a); func(); a+=10; printf(main:n=%d a=%d\n,n,a); func(); printf(main:n=%d a=%d\n,n,a); } 运行结果: main:n=1 a=0 func: n=2 a=4 main:n=2 a=10 func: n=3 a=6 main:n=3 a=10 int c; static int a; main( ) { float x,y; … } char s; f( ) { static int b=1; …… } 3.外部变量(extern类别) 在函数外定义的变量若没有用 static说明,则是外部变量。外部变量只能隐式定义为extern类别,不能显式定义。 全局静态变量 自动变量 局部静态变量 外部变量 ⑴ 内存分配 编译时,将其分配在静态存储区,程序运行结束释放该单元。 ⑵ 变量的初值 若定义变量时未赋初值,在编译时,系统自动赋初值为0。 ⑶ 生存期 整个程序的执行期间。 ⑷ 作用域 从定义处开始到本源文件结束。 此外,还可以用extern进行声明,以使其作用域扩大到该程序的其它文件中。 外部变量 问题:全局静态变量的作用域可以扩展到本程序的其它文件吗? 外部变量声明的一般格式 extern 数据类型 变量名1,…,变量名n; 或 extern 变量名1,…,变量名n; 注意: ①外部变量声明用关键字extern,而外部变量的定义不能用extern,只能隐式定义。 ②定义外部变量时,系统要给变量分配存储空间,而对外部变量声明时,系统不分配存储空间,只是让编译系统知道该变量是一个已经定义过的外部变量,与函数声明的作用类似。 4.寄存器变量(register类别) 只有函数内定义的变量或形参可以定义为寄存器变量。寄存器变量的值保存在CPU的寄存器中。 受寄存器长度的限制,寄存器变量只能是char、int和指针类型的变量。 main( ) { long int sum=0; register int i; for (i=1; i=1000; i++) sum+=i; printf(sum=%ld\n ,sum); } 程序输出结果: sum=500500 归纳变量的分类 1.按照变量的作用域对变量分类 ⑴ 局部变量 ⑵ 全局变量 2.按照变量的生存期对变量分类 ⑴ 静态存储变量 包括:局部静态变量和全局静态变量 ⑵ 动态存储变量

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档