int i,j,x=0; static int a[8][8];int i,j,x=0;static int a[8][8];for(i=0;i
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/29 01:14:59
int i,j,x=0; static int a[8][8];int i,j,x=0;static int a[8][8];for(i=0;i
int i,j,x=0; static int a[8][8];
int i,j,x=0;
static int a[8][8];
for(i=0;i
int i,j,x=0; static int a[8][8];int i,j,x=0;static int a[8][8];for(i=0;i
auto 局部变量
auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回.在大括号{}内声明.
自动变量就是指在函数内部定义使用的变量.他只是允许在定义他的函数内部使用它.在函数外的其他任何地方都不能使用的变量.自动变量是局部变量,即它的区域性是在定义他的函数内部有效.当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他.由于自动变量在定义他的函数的外面的任何地方都是不可见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同名的变量,他们之间不会发生冲突的.因为他们都有自己的区域性,而且它没有链接性(即:不允许其他的文件访问他的).来看看自动量的持续性.计算机在执行这个函数的时候,创建并为它分配内存,当函数执行完毕返回后,自动变量就会被销毁.这个过程是通过一个堆栈的机制来实现的.为自动变量分配内存就压栈,而函数返回时就退栈.
static 静态变量
一、局部静态变量
局部变量按照存储形式可分为三种auto,static,register.
与auto类型(普通)局部变量相比,static局部变量有三点不同:
1.存储空间分配不同
auto类型分配在栈上,属于动态存储类别,占动态存储区空间,函数调用结束后自动释放,而static分配在静态存储区,在程序整个运行期间都不释放.两者之间的作用域(有效范围)相同,但生存期不同.
2.static局部变量在所处模块在初次运行时进行初始化工作,且只操作一次.
3.对于局部静态变量,如果不赋初值,编译期会自动赋初值0或空字符,而auto类型的初值是不确定的.
特点:static局部变量的”记忆性”与生存期的”全局性”
所谓”记忆性”是指在两次函数调用时,在第二次调用进入时,能保持第一次调用退出时的值.
注意事项:
1.“记忆性”,程序运行很重要的一点就是可重复性,而static变量的”记忆性”破坏了这种可重复性,造成不同时刻至运行的结果可能不同.
2.“生存期”全局性和唯一性.普通的local变量的存储空间分配在stack上,因此每次调用函数时,分配的空间都可能不一样,而static具有全局唯一性的特点,每次调用时,都指向同一块内存,这就造成一个很重要的问题 ---- 不可重入性!
二、外部静态变量/函数
在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.,但为了限制全局变量/函数的作用域,函数或变量前加static使得函数成为静态函数.但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数).注意此时,对于外部(全局)变量,不论是否有static限制,它的存储区域都是在静态存储区,生存期都是全局的.此时的static只是起作用域限制作用,限定作用域在本模块(文件)内部.
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名.