C语言静态变量与自动变量以及众多类型变量辨析

谈起变量的类型,映入眼帘的首先可能是静态变量、自动变量;也可能是外部变量、内部变量;或许还会有全局变量、局部变量、寄存器变量...总之,不免让人感到头大。

那么今天我就借助《C程序设计语言》《C和指针》这两本书来尽可能区分一下他们。

首先我们要了解变量的三种属性:作用域,链接属性,存储类型。

作用域:变量可以被使用的区域。

链接属性:决定如何处理不同位置出现的变量。

存储类型:三个地方用于储存变量,分别是普通内存、运行时堆栈、硬件寄存器。

还有 代码块:位于一对花括号之间的所有语句称为一个代码块。如int fun(){...}、if(..){...}等。在花括号之间为代码块区域。

静态变量,自动变量与寄存器变量可以放在一起分析(因为他们或多或少与位置相关)

静态变量自动变量寄存器变量
所有的代码块之外声明的变量在代码块内部定义的变量用register修饰的变量
储存于静态内存中储存在堆和栈中储存在寄存器中
程序运行之前创建,整个运行期间存在直至程序结束控制流进入代码块时被创建,离开时被销毁创建销毁时间与自动变量相同

创建也指系统为其分配内存,销毁即释放内存。

寄存器变量一般是在程序中使用频率高的,可加快程序执行速率。如register int a;把a声明为寄存器变量。

然后我们区分外部变量和内部变量,全局变量和局部变量

外部变量指定义在函数体之外的变量。又称全局变量(可以被程序所有对象或函数引用,即在全局范围内访问)

内部变量指定义在函数体内部的变量。又称局部变量(只能被函数内部使用,无法被其他对象或函数引用,即在局部区域范围可以被访问),同时包括函数的参数。

这样看内部变量应该属于自动变量的一种(自动变量还包括非函数的花括号中的变量),

最后附上一点计算机知识:为了存储数据,计算机的主存储器包含大量的电路,每一个电路都能储存比特,即二进制数字0或1中的一个。这些存储电路以单元(存储器)的形式排列。为了识别计算机主存的单元格,为每个单元格分配一个唯一的名称,称其为地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值