第10章数据的存储类型
变量在内存中的存储
局部变量和全局变量
变量的存储类型
内部函数和外部函数
动态存储单元
修饰符const
本章介绍C语言对变量规定的一些存储类型。其中要涉及到变量的生存期,变量的作用域,可见性,局部变量和全局变量等一些重要概念。
变量在内存中的存储
系统为运行程序,在内存中为数据的存储开辟了两块区域:静态数据区和动态数据区。分配在静态数据区的变量,叫做静态变量,分配在动态数据区的变量叫做动态变量。
变量从在数据区建立到被撤销,这段时间称为变量的生存期。分配在静态数据区的变量,在程序运行结束前是一直存在的。这样的变量的生存期为程序的运行期。
有些变量是在程序运行期间根据需要动态地分配到动态数据区的,在适当的时候会将这种动态变量的空间收回。所以,动态变量的生存期是有限的。
变量在程序的某一部分是有效的,而在另一部分可能是无效的,不可见的。有的变量可能在整个程序文件中一直有效的。对于上述情况,我们说变量有不同的作用域。所谓变量的作用域,就是指变量的使用范围。
从作用域这个角度讲,变量区分为局部变量和全局变量。全局变量分配在静态数据区,而局部变量则根据需要可能分配在动态数据区,也可能分配在静态数据区。
局部变量和全局变量
局部变量
在任何一个代码块内定义的变量叫做局部变量。所谓代码块就是在一对花括号内的代码段,包括函数体,函数体内的语句块。局部变量只能在说明它的代码块内使用,局部变量的作用域,限于说明它的代码块内:从说明的地方开始至所在的代码块结束。所以,局部变量在执行说明它所在的代码块时,才是存在的。当退出其代码块时,这些变量也就随之消失,成为不可见。
下面的程序,在同一个main()函数中,定义了三个数据类型和变量名均相同的局部变量i。在访问这些变量i中,它们不会混淆。因为它们是三个不同的局部变量。它们各有自己的作用域。
程序如下:
#include ""
main()
{
int i = 10; /* 定义函数main()的局部变量i,它的作用域是整个函数内*/
printf("Enter a positive or negative number: ");
scanf("%d", &i);
printf("In main() i = %d\n",i);
if(i>0)
{
int i = -10; /*定义在if代码块内的局部变量i有效,主函数定义的i不可见*/
printf("In if i is %d\n", i); }
else
{
int i = 20; /* 定义else代码块的局部变量i有效,前两个i不可见*/
printf("In if_else i is %d\n", i);
}
printf("The i in main() still is %d\n", i); /*主函数定义的i有效*/
return;
}
10 数据的存储类型 来自淘豆网m.daumloan.com转载请标明出处.