变量存储类别 动态存储方式和静态存储方式 从变量值存在的时间角度来分,可以 分为动态存储方式和静态存储方式 静态存储方式 程序在运行期间分配固定的存储空间 的方式 动态存储方式 在程序运行期间根据需要进行动态的 分配存储空间的方式
变量存储类别 • 动态存储方式和静态存储方式 从变量值存在的时间角度来分,可以 分为动态存储方式和静态存储方式 ----静态存储方式 程序在运行期间分配固定的存储空间 的方式 ----动态存储方式 在程序运行期间根据需要进行动态的 分配存储空间的方式
变量存储类别 通常存储空间可以分为三个部分 1程序区:用语存放程序代码 2静态存储区:用来存放全局变量等 数据,在程序开始执行时就给变量分配 存储区域,直到程序运行结束才释放存 储空间,在程序执行过程中,这些变量 始终占据固定的内存单元
变量存储类别 通常存储空间可以分为三个部分: 1.程序区:用语存放程序代码 2.静态存储区:用来存放全局变量等 数据,在程序开始执行时就给变量分配 存储区域,直到程序运行结束才释放存 储空间,在程序执行过程中,这些变量 始终占据固定的内存单元
变量存储类别 3动态存储区域存放以下数据 函数形式参数 在调用函数时临时分配存储空间给 形式参数,函数调用完毕,则释放存储 空间 自动变量(未加 static声明的局部变 量) 函数调用时的现场保护和返回地址
变量存储类别 3.动态存储区域存放以下数据 ----函数形式参数 在调用函数时临时分配存储空间给 形式参数,函数调用完毕,则释放存储 空间 ----自动变量(未加static声明的局部变 量) ----函数调用时的现场保护和返回地址
变量存储类别 注意: 存储在动态存储区的变量都是在函数 或过程调用时,临时分配存储空间,函 数调用完毕就释放存储空间 如果多次调用函数,则可能多次给这 类变量分配存储空间,它们的生命周 期并不是整个程序运行期
变量存储类别 注意: 存储在动态存储区的变量都是在函数 或过程调用时,临时分配存储空间,函 数调用完毕就释放存储空间。 如果多次调用函数,则可能多次给这 一类变量分配存储空间,它们的生命周 期并不是整个程序运行期
变量存储类别 二·C语言中的存储类别有 1.自动的(auto) 2.静态的( static 3.寄存器( register) 4外部的( extern)
变量存储类别 • C语言中的存储类别有 1.自动的(auto) 2. 静态的(static) 3. 寄存器(register) 4.外部的 (extern)
变量存储类别 auto变量 函数中的局部变量,如果没有声明为 static存 储类别都为自动变量 关键字auto可以省略不写,如果不写 static关 键字,则系统默认其前面是auto关键字 例如:在函数体内定义变量 int a.b.c auto int a b,c;两种方式是完全等价的
变量存储类别 ----auto变量 函数中的局部变量,如果没有声明为static存 储 类别都为自动变量 关键字auto可以省略不写,如果不写static关 键字,则系统默认其前面是auto 关键字 例如:在函数体内定义变量 int a,b,c; auto int a,b,c; 两种方式是完全等价的
变量存储类别 --stic变量 有时候希望函数中的局部变量的值在 函数调用结束后不消失,仍然保留原来 的值,即下次调用该变量时,该变量中 已经有上一次函数调用结束时的值,那 么可以在这种局部变量前面加 Istatic关键 字
变量存储类别 ----static变量 有时候希望函数中的局部变量的值在 函数调用结束后不消失,仍然保留原来 的值,即下次调用该变量时,该变量中 已经有上一次函数调用结束时的值,那 么可以在这种局部变量前面加static关键 字
变量存储类别(程序一) #include #include void testO ● void test int num1=0 static int num2=0 numl++ num2++ printf("num1=%03din", num1)
变量存储类别(程序一) #include #include void test(); void test() { int num1=0; static int num2=0; num1++; num2++; printf("num1=%3d\n",num1);
变量存储类别(程序二) printf("num2=%din", num2);) maino Int 1: for(i=0; 1<3; 1++ printi("第%d次调用函数后numl和num2的值Ⅶn"i); testo: system("pause)
变量存储类别(程序二) printf("num2=%3d\n",num2); } main() { int i; for(i=0;i<3;i++) { printf("第%d次调用函数后num1和num2的值\n",i); test(); } system("pause"); }
变量存储类别 自动变量和静态变量的区别 1.静态局部变量的存储空间分配在静态存储 区域,而动态变量的存储空间分配在动态存 储区域 2静态局部变量的生命周期为整个程序运行 期,自动局部变量的生命周期为函数调用期 3静态局部变量是在编译时赋初始值,整个 程序运行期只进行一次赋值,再次调用函数 时,静态变量不再初始化,而是存放上次函 数调用结束后的值
变量存储类别 • 自动变量和静态变量的区别 1.静态局部变量的存储空间分配在静态存储 区域,而动态变量的存储空间分配在动态存 储区域 2.静态局部变量的生命周期为整个程序运行 期,自动局部变量的生命周期为函数调用期 3.静态局部变量是在编译时赋初始值,整个 程序运行期只进行一次赋值,再次调用函数 时,静态变量不再初始化,而是存放上次函 数调用结束后的值