时隐时现的数据-变量的存储属性
4 动态变量与静态变量
(1)变量的存储方式
静态存储:程序运行期间分配固定存储空间
动态存储:程序运行期间根据需要动态分配存储空间
((22 ))变量的生存期变量的生存期 变量值保留的期限变量值保留的期限
静态变量: 从程序开始执行到程序结束
动态变量: 从包含该变量定义的函数开始执行至函数执行结束
程序区
全局变量全局变量、局部静态变量局部静态变量
静态存储区 形参变量
局部动态变量(auto register)
动态存储区 函数调用现场保护和返回地址等
时隐时现的数据-变量的存储属性
(3)变量的存储类型
①自动变自动变量auto
自动变量存储特性:
•定义自动变量的函数被调用时,才为自动变量分配内存。
••函数函数调用结束时调用结束时 ,为自动变量分配的内存被释放为自动变量分配的内存被释放。
•自动变量仅在定义它的函数内部有效。
•自动变量被存放在内存的动态存储区。
结论 自动变量的生存期和可见性 (作用域 )仅限于定义
结论 :自动变量的生存期和可见性 (作用域 )仅限于定义
它的函数内部。自动变量是一种局部变量。
时隐时现的数据-变量的存储属性
int main()
{ int a,b,c,i; main( ) sum( )
int sum(int ,int );
for(i=0;i<3;i++) 17 17
83c 00083c
{ printf(“Enter a,b:\n”);
scanf(“%d%d”,&a,&b); 952b 952b
c=sum(a,b); 83a1 83a1
priintf(“Stf(“Sum=%d%d\\n””,c));
return 0;
} 输入:3 5
} 输入:1 2
int sum(int a,int b)
{ int c=0; 输入输入 ::88 99
{ int c=0;
c=c+a+b; 问题:
return(c); 在函数内部说明的变量是否都有这样的存储特性吗?
}
时隐时现的数据-变量的存储属性
②静态变量static
静态变量存储在内存的静态存储区,有固定的地址。
静态变量在程序运行期间,变量值自始至终保留。
静态变量static分为局部静态变量和全局静态变量。
局部静态变量 :函数内部定义,函数外不可见。程
序运行期间,值保留。
全局静态变量 :函数外定义,仅本文件内部其他函
数可以访问。
时隐时现的数据-变量的存储属性
#includ