c语言变量总结

变量是C语言最基础也是最核心的概念,C的变量比较复杂,这里做个总结,希望对学习C的兄弟们有帮助。
 
 
一、认识变量
 
变量字面含义是表示一个可变的数据,数据有各种各样的类型,变量的类型指定了变量所能表示的数据类型。
 
从存储角度认识变量的本质,举例来说:
char c = 'x';
这个语句定义了一个char变量c,变量的值为字母120(字母x的ASCII码值为120),这个变量存储在计算机的某块内存区域,其存储单元的地址(编号)假设为0x1101。
变量名c实质就是内存单元地址0x1101的一个符号,c代表的内存地址为0x1101。
当使用变量c时候,其本质是访问所对应的内存单元。
变量之所以能改变,是因为内存中数据是可以改变的,因此称之为变量。
 
如果你对计算机以上的内容还不理解,请看《计算机组成原理》。
实际上学习计算机组成原理,是学习汇编和C语言先行课程,可是大学里面往往颠倒了,误导了一批又一批的高材生。
 
二、从时空角度来认识变量分类
 
刚学C语言的时候,往往会有很多疑问,寄存器变量,全局变量等等,尤其是这些概念交叉起来外部寄存器变量,初学者就晕菜了。
 
实际上变量是有其时空特性的。简单说就是:
从作用域(空间)角度来划分,可分为全局变量和局部变量。
从存储类型(生命周期/时间)角度划分,可分为静态存储方式和动态存储方式。
 
另外,从变量的表达值类型划分,类型很多很多,一般说的int类型变量,就是这个意思。
 
三、认识变量的存储类型
 
为了认识存储类型,需要了解C语言程序内存区域的划分,一般划分为以下五大部分:
1、栈区(Stack):栈是由编译器自动分配和释放的内存区域,用于存放局部变量(包括方法的参数等)。栈区里的变量个数和变量的值会随着程序的运行而改变。
2、堆区(Heap):程序员通过C的函数(比如malloc)申请的内存区域,使用完毕后释放(或由OS自动释放)。
3、全局区(静态区(Static):这本内存区域用来保存全局变量和静态变量。在进入程序时分配,程序结束后由系统释放,整个程序运行期间一直存在。
4、文字常量区:用来保存常量字符串的内存区域,程序结束后,由系统释放。
5、程序代码区:用来保存程序二进制代码的内存区域。
 
 
四、C变量存储类型关键字
 
C变量存储类型描述关键字有四:
 
1、auto 自动变量
属局部变量,动态存储。auto可省略,系统不为其进行默认初始化,未初始化的静态变量指向一个不可预期的、无意义的值。
 
2、register 寄存器变量
与auto一样,属局部变量,动态存储。但存储的位置在CPU内。不能对变量使用取地址运算符(&),因为寄存器变量的存储没有内存地址。
 
3、extern 外部变量
定义在函数外,也叫全局变量,使用静态存储方式保存在全局区( 静态区)。
外部变量和全局变量是对同一类型变量的两种不同角度的法。全集变量时从他的作用域角度提出的,外部变量时从他的存储方式提出的,表示其生命周期。
 
4、static 静态变量
存储于静态区,可分为静态全局(或外部)和静态局部(或内部)两种类型。对于基本类型的静态局部变量,系统会自动为其赋初值0(与外部变量相同)。
但属于静态存储方式的变量不一定就是静态变量,外部变量(全局变量)也属于静态存储方式,但外部变量不一定是静态变量。
 
注意:对于寄存器变量,很多C编译器并没有真正将寄存器变量放到CPU内部,而是作为自动变量处理。使用register只是提示编译器将变量定义为寄存器变量,期望编译器将其作为寄存器变量,但不一定能达到期望。因为要看编译器是否支持了,其次看看CPU内部是否有可用寄存器空间。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值