变量的连接属性及存储类型

1 篇文章 0 订阅
1 篇文章 0 订阅

  连接属性分为:external(外部连接),internal(内部连接),none(无)。

  如何区分是那种连接属性:

(1)全局变量没有关键字 static 修饰的都是外部连接属性,也就是说在一个源文件中定义全局变量int k(源文件1),可以在其他源文件用 extern int k(源文件2)来使用源文件1 中的 变量k,

(2)用关键字 static 修饰的都是内部链接,如果 static 修饰的是全局变量,在该变量在该源文件中都可以用;如果 static 修饰的是局部变流量,则变量只在该函数内起作用,但是变量会一直存在,不会像none 类型的变量:在函数调用结束之后就消失。

  关键字 static 和 extern 在变量声明时,修改变量的连接属性。(static 只能对缺省连接属性为 external 的变量进行修改,通用 extern 也不能修改static 的连接属性)


存储类型:

变量的存储类型是存储变量的内存类型,存储类型决定变量何时创建、何时销毁。

在内存中有三个地方可以存储变量:普通内存,运行时堆栈(malloc 等分配的内存),硬件寄存器。

静态变量:定义在代码块外的变量---->存储在普通内存中,也就是不在堆栈中,其特点是:在程序运行之前创建,在程序的整个执行期间一直存在。

自动变量:在代码块内部定义的变量,存储在堆栈中;程序执行到代码块时,自动变量才被创建,程序执行完该代码块后,自动变量自行销毁。

寄存器变量:一般使用频率较高的变量都会声明称寄存器变量。


  寄存器变量的特点:寄存器变量的串讲和销毁时间同自动变量相同,但是需要额外的一些工作就是必须使寄存器变量的程序返回之前后恢复寄存器的值,一般情况下用堆栈来完成这个任务,也就是在程序开始执行之前,将寄存器的值存储在堆栈中,程序完成后,用堆栈回复寄存器的值。


下面一张表是 C 和 Pointer 的总结,非常好:

变量类型声明位置是否存储于堆栈作用域如果声明为 static
全局所有代码块之外从声明到文件尾部不允许从其他源文件访问
局部代码块起始处整个代码块变量不存储于堆栈中,他的值在整个程序执行过程中一直 存在
形式参数函数头部整个函数不能




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值