文档详情

大学C语言程序设计基础第7章.ppt

发布:2017-08-13约2.74万字共78页下载文档
文本预览下载声明
练习:写出下列程序的运行结果 int a=5; main() {void p1(),p2(); printf(a=%d\n,a); p1(); p2(); } void p1() { printf(a*a=%d\n,a*a); a=8; } void p2() { printf(a*a*a=%d\n,a*a*a); } printf(a=%d\n,5); printf(a*a=%d\n,a*a); p1(); a=8; p2(); printf(a*a*a=%d\n,a*a*a); 输出:a=5 a*a*a=512 a*a=25 程序一进入main()函数,变量x就被创建 当程序运行到此局部范围内(即花括号内)时创建,用完即撤消,即释放变量。 当程序运行到函数prt()内部时,变量x才被创建,离开函数时,变量就被释放 main( ) { int x=1; { void prt(void); int x=3; prt( ); printf(x=%d\n,x); } printf(“x=%d\n,x); } void prt(void) { int x=5; printf(“x=%d\n,x); } 练习: § 7.9 变量的存储类别 一、动态存储方式与静态动态存储方式:(变量的生存期) 静态存储方式:在程序运行期间分配固定的存储空间的方式。 动态存储方式:程序运行期间根据需要进行动态的分配存储空间的方式。 ● 用户存储空间可以分为三个部分:程序区, 静态存储区, 动态存储区 ? ① 程序区:用于存放程序编译后形成的可执行代码(执行时装入)。 ② 静态存储区:用于存放程序中的静态数据,如全局变量等。 ③ 动态存储区:用于存放程序中的动态数据,如函数形参、局部变量、函数调用时的现场保护和返回地址等。 ●静态数据:在静态存储区中分配存储单元并在整个程序执行过程中占用该单元,直到程序运行结束。 ●动态数据:在函数执行时分配存储空间,函数结束时释放这些空间。 ●动态存储区存放以下数据: (1) 函数形式参数; (2) 自动变量(未加static声明的局部变量); (3) 函数调用时的现场保护数据和返回地址. ▼ 以上这些数据,在函数调用时分配动态存储空间,函数结束时释放 这些空间。 ●变量和函数有两个属性: 数据类型 存储类别(生存期)。 数据类型:如:int, float, char…. 存储类别:静态存储和动态存储二大类。四种: 自动局部变量(auto)、 静态局部变量(static)、 寄存器变量 (register)、 外部变量 (extern)。 二、动态存储的auto类局部变量 auto 类型定义符 变量名; 如:auto float a,b; 等价于:float a,b; ●自动变量是局部变量,若一个局部变量没有定义类别,则隐含为动 态存储auto类别。如果定义时没有给自动变量赋初值,该自动变量 的值是不确定的。 ●如果定义时给自动变量赋了初值,则每次进入该函数时都要执行一 次这种赋初值的操作(分配存储空间)。 ●函数调用结束时释放这些存储空间.。即auto变量没有 “继承性”。 例如: int f(int a) /*定义f函数,a为参数*/ {auto int b,c=3; /*定义b,c自动变量*/ …… } a是形参,b,c是自动变量,对c赋初值3。执行完 f 函数后,自动 释放a,b,c所占的存储单元。 三、用static声明的静态存储的局部变量 有时希望局部变量的值在函数调用结束后保留,这时就应该指定局部变量 为“静态局部变量”,用关键字 static 进行声明。 static 类型定义符 变量名; 例: 考察静态局部变量的值: (演示) void f(int c) /*形参也是动态存储的auto变量*/ { int a=0; /*自动变量 a */ static int b=0; /*静态局部变量b */ a++; b++; p
显示全部
相似文档