C语言程序设计
----教学过程篇变量存储类别
动态存储方式和静态存储方式从变量值存在的时间角度来分,可以分为动态存储方式和静态存储方式
----静态存储方式程序在运行期间分配 固定 的存储空间的方式
----动态存储方式在程序运行期间 根据需要进行动态 的分配存储空间的方式变量存储类别通常存储空间可以分为三个部分:
1.程序区:用语存放程序代码
2.静态存储区:用来存放全局变量等数据,在程序开始执行时就给变量分配存储区域,直到程序运行结束才释放存储空间,在程序执行过程中,这些变量始终占据固定的内存单元变量存储类别
3.动态存储区域存放以下数据
----函数形式参数在调用函数时临时分配存储空间给形式参数,函数调用完毕,则释放存储空间
----自动变量(未加 static声明的局部变量)
----函数调用时的现场保护和返回地址变量存储类别注意:
存储在动态存储区的变量都是在函数或过程调用时,临时分配存储空间,函数调用完毕就释放存储空间。
如果多次调用函数,则可能多次给这一类变量分配存储空间,它们的生命周期并不是整个程序运行期。
变量存储类别
C语言中的存储类别有
1.自动的( auto)
2,静态的( static)
3,寄存器( register)
4.外部的 ( extern)
变量存储类别
----auto变量函数中的局部变量,如果没有声明为 static存储 类别都为自动变量关键字 auto可以省略不写,如果不写 static关键字,则系统默认其前面是 auto 关键字例如:在函数体内定义变量
int a,b,c;
auto int a,b,c; 两种方式是完全等价的变量存储类别
----static变量有时候希望函数中的局部变量的值在函数调用结束后不消失,仍然保留原来的值,即下次调用该变量时,该变量中已经有上一次函数调用结束时的值,那么可以在这种局部变量前面加 static关键字变量存储类别(程序一)
#include <stdio.h>
#include <stdlib.h>
void test();
void test()
{
int num1=0;
static int num2=0;
num1++;
num2++;
printf("num1=%3d\n",num1);
变量存储类别(程序二)
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.静态局部变量是在编译时赋初始值,整个程序运行期只进行一次赋值,再次调用函数时,静态变量不再初始化,而是存放上次函数调用结束后的值变量存储类别
4.自动局部变量每调用一次函数,就重新分配存储空间,并且重新初始化
5.对于静态局部变量来说,如果程序中没有对其进行初始化,则系统自动给其赋值,0
(数值型变量)或者 \0(字符变量)
6.自动局部变量如果在程序中没有赋值,则它的值是不确定的
7.尽管静态局部变量的生命周期是整个程序运行期,但其它的函数不能使用它变量存储类别(程序二)
#include <stdio.h>
#include <stdlib.h>
void test();
void test()
{
int i;
static int j;
static char k;
printf("自动变量 i的值为,%3d\n",i);
printf("静态变量 j的值为,%3d\n",j); //静态整型变量未初始化,其值为 0
变量存储类别(程序二)
printf("静态变量 k的值为,%3d\n",k); //静态字符变量未初始化,其值为 '\0',对应的 ASCII码为
0
}
main()
{
test();
system("pause");
}
变量存储类别
Register变量不管是静态变量还是自动变量都是存放在内存当中,如果对该变量使用相当频繁,则可以把该变量定义成 register(寄存器 )变量,这样可以提高程序的运行速度,
这一类变量称为寄存器变量变量存储类别关于寄存器变量的几点说明
1.只有局部变量中的自动变量和函数的形式参数可以定义为寄存器变量,函数调用开始的时候分配寄存器存储空间,
调用结束则释放存储器空间,其生命周期和自动变量是一样的
2.不可以定义任意多的寄存器变量
3.静态局部变量不可以定义为寄存器变量变量存储类别
Extern变量外部变量(即全局变量)是在函数外部定义的,它的作用域为从变量定义处到本程序的末尾,可以为起作用域中所有的函数来调用
----教学过程篇变量存储类别
动态存储方式和静态存储方式从变量值存在的时间角度来分,可以分为动态存储方式和静态存储方式
----静态存储方式程序在运行期间分配 固定 的存储空间的方式
----动态存储方式在程序运行期间 根据需要进行动态 的分配存储空间的方式变量存储类别通常存储空间可以分为三个部分:
1.程序区:用语存放程序代码
2.静态存储区:用来存放全局变量等数据,在程序开始执行时就给变量分配存储区域,直到程序运行结束才释放存储空间,在程序执行过程中,这些变量始终占据固定的内存单元变量存储类别
3.动态存储区域存放以下数据
----函数形式参数在调用函数时临时分配存储空间给形式参数,函数调用完毕,则释放存储空间
----自动变量(未加 static声明的局部变量)
----函数调用时的现场保护和返回地址变量存储类别注意:
存储在动态存储区的变量都是在函数或过程调用时,临时分配存储空间,函数调用完毕就释放存储空间。
如果多次调用函数,则可能多次给这一类变量分配存储空间,它们的生命周期并不是整个程序运行期。
变量存储类别
C语言中的存储类别有
1.自动的( auto)
2,静态的( static)
3,寄存器( register)
4.外部的 ( extern)
变量存储类别
----auto变量函数中的局部变量,如果没有声明为 static存储 类别都为自动变量关键字 auto可以省略不写,如果不写 static关键字,则系统默认其前面是 auto 关键字例如:在函数体内定义变量
int a,b,c;
auto int a,b,c; 两种方式是完全等价的变量存储类别
----static变量有时候希望函数中的局部变量的值在函数调用结束后不消失,仍然保留原来的值,即下次调用该变量时,该变量中已经有上一次函数调用结束时的值,那么可以在这种局部变量前面加 static关键字变量存储类别(程序一)
#include <stdio.h>
#include <stdlib.h>
void test();
void test()
{
int num1=0;
static int num2=0;
num1++;
num2++;
printf("num1=%3d\n",num1);
变量存储类别(程序二)
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.静态局部变量是在编译时赋初始值,整个程序运行期只进行一次赋值,再次调用函数时,静态变量不再初始化,而是存放上次函数调用结束后的值变量存储类别
4.自动局部变量每调用一次函数,就重新分配存储空间,并且重新初始化
5.对于静态局部变量来说,如果程序中没有对其进行初始化,则系统自动给其赋值,0
(数值型变量)或者 \0(字符变量)
6.自动局部变量如果在程序中没有赋值,则它的值是不确定的
7.尽管静态局部变量的生命周期是整个程序运行期,但其它的函数不能使用它变量存储类别(程序二)
#include <stdio.h>
#include <stdlib.h>
void test();
void test()
{
int i;
static int j;
static char k;
printf("自动变量 i的值为,%3d\n",i);
printf("静态变量 j的值为,%3d\n",j); //静态整型变量未初始化,其值为 0
变量存储类别(程序二)
printf("静态变量 k的值为,%3d\n",k); //静态字符变量未初始化,其值为 '\0',对应的 ASCII码为
0
}
main()
{
test();
system("pause");
}
变量存储类别
Register变量不管是静态变量还是自动变量都是存放在内存当中,如果对该变量使用相当频繁,则可以把该变量定义成 register(寄存器 )变量,这样可以提高程序的运行速度,
这一类变量称为寄存器变量变量存储类别关于寄存器变量的几点说明
1.只有局部变量中的自动变量和函数的形式参数可以定义为寄存器变量,函数调用开始的时候分配寄存器存储空间,
调用结束则释放存储器空间,其生命周期和自动变量是一样的
2.不可以定义任意多的寄存器变量
3.静态局部变量不可以定义为寄存器变量变量存储类别
Extern变量外部变量(即全局变量)是在函数外部定义的,它的作用域为从变量定义处到本程序的末尾,可以为起作用域中所有的函数来调用