Day5 | 每天五道题

1、什么是变量的生存期?

答︰

变量的生存期指的是变量存在的时间。全局变量的生存期是程序运行的整个时间,局部变量在不同的声明中生存期是不同的。用auto或register声明的局部变量的生存期与所在的函数被调用的时间段相同,函数调用结束,变量就不存在了。用static声明的局部变量在函数调用结束后内存不释放,变量的生存期是程序运行的整个时间。凡不声明为任何存储类别的都默认为auto(自动变量),自动的内部变量是一种临时性变量,函数被调用时分配,函数执行结束时释放。

2、C语言变量的存储特性可分几类?以及各类的特点?  

答︰

四种:自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。 

1、自动变量:函数中所有的非静态局部变量。其作用域仅仅局限于其定义的函数中,存储在动态存储区,在没有初始化的时候,其变量的值是随机无用的。随着函数的进栈和出栈而创建和销毁。 

2、静态变量:在变量前加上static关键字的变量。存储在静态存储区,在没有初始化的时候,会被系统初始化为0或者NULL,并且只初始化一次(初始化不等同于赋值)。长期存在静态存储区,直到程序结束。静态全局变量:作用域只是在其定义的源文件中有效,对外部变量起到了“屏蔽”的作用。 静态局部变量:其作用域是其定义的函数中。  

3、外部变量:一般用作全局变量作用域的扩展。把全局变量在其他源文件中声明成extern变量,可以扩展该全局变量的作用域至声明的那个文件中,其本质作用就是对全局变量作用域的扩展。长期存在静态存储区,直到程序结束。  

4、寄存器变量:一般经常被使用的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register变量会被存储在寄存器中,计算速度远快于存在内存中的非register变量。存储在cpu的寄存器中,速度快,一般不需要程序员定义寄存器变量,这是由于一些编译器会把需要参加很多次计算的变量转化成寄存器变量,不允许程序员对寄存器变量的地址进行操作。程序结束函数值就会消失。

3、C语言中,动态存储区主要存放哪些数据? 

答︰

动态存储区中存放以下数据:函数的形参;函数调用时的现场保护和地址等;auto/register 型局部变量。对以上数据,当进行函数调用时分配动态存储空间,当函数调用结束时,释放这些存储单元。在程序的执行过程中,这种分配和释放是动态的。

4、static声明有什么用途 (请至少说明两种)?

答︰

限制变量的作用域;设置变量的存储域;

5、static全局变量与普通的全局变量有什么区别?

答︰

1)全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
2)全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。
3)这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
4)static全局变量只初使化一次,防止在其他文件单元中被引用。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值