c语言:变量的存储类别

您所在的位置:网站首页 不是c语言支持的存储类别 c语言:变量的存储类别

c语言:变量的存储类别

2024-07-01 07:49| 来源: 网络整理| 查看: 265

1.动态存储方式与静态存储方式

运行结果:

1)函数中的局部变量(形参、在函数中定义的变量等),如果不专门声明为static存储类别,都是动态分配存储空间的,在函数调用时系统给这些变量分配空间,在调用结束时系统就自动释放这些内存空间,因此这类局部变量被称为自动变量。

2)实际上,关键字“auto”可以省略,auto不写则隐含确定为“自动存储类别”,也就是动态存储方式。

3)动态局部变量存在动态存储区,静态局部变量存在静态存储区。

4)静态局部变量在程序整个运行期间都不会被释放,而动态局部变量在函数调用结束就被释放。

5)静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行期间它已有初值,在程序运行结束保留最后一次的赋值结果。

    动态局部变量是在函数调用时赋初值的,并且每调用一次重新赋一次初值。

可以这样理解,当你敲完代码,肯定是先保存,然后编译,接下来再考虑运行,所以,在你编译完后,静态局部变量已经被赋初值。

6)如果在定义局部变量时没有赋初值,那么静态局部变量在编译时会自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量(动态变量)来说,如果不赋初值则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新分配内存单元,而所分配的单元的值是不确定的。

7)虽然静态局部变量在函数调用结束后依然存在,但是其他函数是不能引用它的。

2.register寄存器变量

1)只有局部自动变量和形参可以作为寄存器变量,其他(如全局变量)不行。在调用一个函数时占用一些寄存器存放寄存器变量的值,函数调用结束后系统自动释放掉寄存器里的寄存器变量,以便在其他函数调用时使用。

2)一个计算机中寄存器数目有限,不能定义任意多个寄存器变量。不同系统允许使用的寄存器个数是不同的,而且对register变量的处理方式不同。有的系统对register变量作自动变量处理,分配动态存储单元,并不把它们真正放入寄存器中,有的系统只允许将int、char和指针类型变量定义为寄存器变量。

3)局部静态变量不能定义为寄存器变量。不能写成:

register static int a,b,c;

不能把变量a,b,c既放入静态存储区中,又放入寄存器中,二者只能选其一。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3