C语言:数据之作用域、链接属性和存储类型总结

作用域
作用域分为4种,文件作用域、函数作用域、代码块作用域和原型作用域。

有什么作用呢?从字面就可以知道,变量在只能在某个区域才体现他们的作用。
①其他函数体无法的通过其名字访问它们
②不同作用域可使用相同名字,而不产生冲突。
在这里插入图片描述

作用域和链接属性关系

缺省的
变量的存储类型指变量值的内存类型,变量的类型最主要的是关乎该变量何时创建、何时销毁以及它的值能保留多久!存储位置不同造成变量具有不同的特性。

有三个地方可以用于存储变量:①普通内存 ②运行时堆栈 ③硬件寄存器

主要由两种方式影响储存类型:声明位置 和 关键字
在这里插入图片描述

1.凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是不属于堆栈的内存,这类变量成为静态变量。静态变量在程序运行之前创建,在程序的整个执行期间始终存在。始终保持原先的值,除非给他赋值一个不同的值或者程序结束。

2.在代码块内部声明的变量的缺省存储类型是自动的,也就是说它存储于堆栈中,成为自动变量。有个关键字auto就是用于修饰这种存储类型的,但它极少使用,因为代码块中的变量在缺省情况下就是自动变量。在程序执行到声明自动变量的代码块时,自动变量才被创建,当程序的执行流离开代码块时,这些自动变量便自行销毁。如果该代码块被数次执行,这些自动变量每次都将重新创建。如果给变量加上static,可以使它的存储类型从自动变量变为静态。函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归。

3.关键字register可以用于自动变量的声明,提示他们应该改存储于机器的硬件寄存器而不是内存中,这类变量称为寄存器变量。效率较高。寄存器变量的创建和销毁时间和自动变量相同,但需要一些额外的工作。寄存器先前存储的值必须恢复,确保调用者得寄存器变量未被破坏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值