第7章 函数和第8章 编译预处理
* #includestdio.h int n=100;//定义全局变量 void func() { n*=2; } void main() { n*=2; printf(n=%d\n,n); func(); printf(n=%d\n,n); } 例分析下面程序的运行结果。 程序运行结果如下: n=200 N=400 7.6 局部变量与全局变量 * 7.7 变量的存储类型 局部变量的属性 数据类型:变量所持有的数据的性质(操作属性) 存储属性 存储器类型:寄存器、静态存储区、动态存储区 生存期:变量在某一时刻存在-------静态变量与动态变量 作用域:变量在某区域内有效-------局部变量与全局变量 局部变量的存储类型 auto -----自动型 register-----寄存器型 static ------静态型 变量定义格式: [存储类型] 数据类型 变量表; 如: int sum; auto int a,b,c; register int i; static float x,y; * 7.7.1 自动变量 函数中的局部变量,如不做专门的说明(说明为静态的存储类别),都是动态分配存储空间的,存储在动态存储区中。在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变量。自动变量用关键字auto作存储类型的说明,“auto”也可以省略 。 例如: int f(int a)/*定义f函数,a为形参*/ {auto int b,c=3;/*定义b、c为自动变量*/ … } 7.7 变量的存储类型 例分析下面程序的运行结果 。 #include stdio.h void fun() { int n=2; /*n为auto存储类别的局部变量*/ n++; printf(n=%d\n,n); } void main() { fun(); fun(); } 程序运行结果如下: n=3 n=3 7.7 变量的存储类型 * 有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。通过下面简单的例子可以了解它的特点。 7.7.2 静态变量 #includestdio.h void func() { auto int a = 1; //auto可以省略 static int b = 3; ++a; ++b; printf(a=%d\n,a); printf(b=%d\n,b); } void main() { int i; for ( i = 0; i 3; i++) { func(); printf(\n); } } 例分析右边程序的运行结果 。 程序运行结果如下: a=2 b=4 a=2 b=5 a=2 b=6 7.7 变量的存储类型 对静态局部变量的说明: (1) 静态局部变量属于静态存储类别,在静态存储区内分配存 储单元。在程序整个运行期间都不释放。 (2) 对静态局部变量是在编译时赋初值的,即只赋初值一次,在 程序运行时它已有初值。以后每次调用函数时不再重新赋初值而 只是保留上次函数调用结束时的值。而对自动变量赋初值,不是 在编译时进行的,而是在函数调用时进行,每调用一次函数重新 给一次初值,相当于执行一次赋值语句。 (3) 如在定义局部变量时不赋初值的话,则对静态局部变量来 说,编译时自动赋初值0(对数值型变量)或空字符(对字符变 量)。而对自动变量来说,如果不赋初值则它的值是一个不确定 的值。这是由于每次函数调用结束后存储单元已释放,下次调用 时又重新另分配存储单元,而所分配的单元中的值是不确定的。 7.7 变量的存储类型 (4) 虽然静态局部变量在函数调用结束后仍然存在,但其他 函数是不能引用它的。 在什么情况下需要用局部静态变量呢? (1) 需要保留函数上一次调用结束时的值。 例如可以用下面方法求n!。 例 打印1到5的阶乘值。 int fac(int n) {static int f=1; f=f*n; return(f); } main() {int i; for(i=1;i=5;i++) printf(“
您可能关注的文档
最近下载
- 传统基材润湿流平(氟碳硅烷嵌段).pdf VIP
- 南京财经大学2024-2025学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- C4D课程考试试题及参考答案.doc VIP
- 2025年陕西公务员申论考试真题及答案B卷.docx VIP
- [渝粤教育] 西北工业大学 航天器控制原理 mooc 资料.docx VIP
- 航天器控制原理(西北工业大学)中国大学MOOC 慕课 章节测验 期末考试答案.pdf VIP
- 精品解析:2025年陕西省中考数学试题(原卷版).docx VIP
- 四维度主力跟踪.pdf
- 2022年陕西省中考数学真题(原卷版).docx VIP
- 大众网关控制器和bcm车身控制模块针脚定义非常有用.pdf VIP
原创力文档

文档评论(0)