c语言:变量的存储类别 |
您所在的位置:网站首页 › 不是c语言支持的存储类别 › c语言:变量的存储类别 |
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 |