第7章 用函数实现模块化程序设计.ppt
文本预览下载声明
int a; int main( ) { …f2( );…f1( );… } void f1( ) { auto int b; … f2( ); … } void f2( ) { static int c; …… } a的作用域 b的作用域 c的作用域 文件file1.c a生存期 b生存期 c生存期 main f2 f1 main f2 f1 main 程序执行过程P213 变量存储类别 函 数 内 函 数 外 作用域 存在性 作用域 存在性 自动变量和寄存器变量 ∨ ∨ ╳ ╳ 静态局部变量 ∨ ∨ ╳ ∨ 静态外部变量 ∨ ∨ ∨(只限本文件) ∨ 外部变量 ∨ ∨ ∨ ∨ 各种类型变量的作用域和存在性的情况 (5) static对局部变量和全局变量的作用不同 局部变量使变量由动态存储方式改变为静态存储方式 全局变量使变量局部化(局部于本文件),但仍为静态存储方式 从作用域角度看,凡有static声明的,其作用域都是局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量) 7.10 关于变量的声明和定义 一般为了叙述方便,把建立存储空间的变量声明称定义,而把不需要建立存储空间的声明称为声明 在函数中出现的对变量的声明(除了用extern声明的以外)都是定义 7.11 内部函数和外部函数 7.11.1 内部函数 7.11.2 外部函数 7.11.1 内部函数 如果一个函数只能被本文件中其他函数所调用,它称为内部函数。 在定义内部函数时,在函数名和函数类型的前面加static,即: static 类型名 函数名(形参表) 7.11.1 内部函数 内部函数又称静态函数,因为它是用static声明的 通常把只能由本文件使用的函数和外部变量放在文件的开头,前面都冠以static使之局部化,其他文件不能引用 提高了程序的可靠性 7.11.2 外部函数 如果在定义函数时,在函数首部的最左端加关键字extern,则此函数是外部函数,可供其他文件调用。 如函数首部可以为 extern int fun (int a, int b) 如果在定义函数时省略extern,则默认为外部函数 例7.16 考察静态局部变量的值。 #include stdio.h int main() { int f(int); int a=2,i; for(i=0;i3;i++) printf(“%d\n”,f(a)); return 0; } int f(int a) { auto int b=0; static c=3; b=b+1; c=c+1; return(a+b+c); } 0 3 b c 第一次调用期间 1 4 例7.16 考察静态局部变量的值。 #include stdio.h int main() { int f(int); int a=2,i; for(i=0;i3;i++) printf(“%d\n”,f(a)); return 0; } int f(int a) { auto int b=0; static c=3; b=b+1; c=c+1; return(a+b+c); } b c 第一次调用结束 1 4 7 例7.16 考察静态局部变量的值。 #include stdio.h int main() { int f(int); int a=2,i; for(i=0;i3;i++) printf(“%d\n”,f(a)); return 0; } int f(int a) { auto int b=0; static c=3; b=b+1; c=c+1; return(a+b+c); } b c 第二次调用开始 0 4 例7.16 考察静态局部变量的值。 #include stdio.h int main() { int f(int); int a=2,i; for(i=0;i3;i++) printf(“%d\n”,f(a)); return 0; } int f(int a) { auto int b=0; static c=3; b=b+1; c=c+1; r
显示全部