C学习笔记1-变量的存储类别



一、变量的声明和定义

1.对于函数言,因为函数包含声明和执行语句两部分,因此,声明指的是函数原型,即”函数头“,而定义则是函数体。

2.对于变量而言,如int a;,这个可以说是声明,也可以说是定义,而像extern a;这样的形式,那么这显然是一个外部变量的声明,可见声明包含了定义,这两种不同情况的根本原因是int a在出现的时候系统就给分配了内存,而extern a;出现系统并未给它分配内存。因而我们可以这样来区分:把建立了存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明。

对一个变量的定义须指定两种属性:数据类型和存储类别,如static int a;

二、变量的存储类别

作用域可分为局部变量和全局变量,局部变量包括函数的形参及函数内定义的变量,全局变量则是在函数体外定义的变量。

生存期可分为静态存储方式和动态存储方式,包含自动(auto),静态(static),寄存器(register)和外部(extern)四类。

1.auto变量

指函数中的局部变量,定义时一般可省略auto,动态存储。

2.static变量

局部变量前加static,则变为静态存储,函数执行后变量的内存和数据还在直到程序终止;

全局变量前加static,则表明对于有多个不同源文件的程序,该变量只能在本文件中起作用,其他源文件不能调用它,静态存储。

3.register变量

局部变量存储在寄存器中以提高运行速率,动态存储。

4.extern变量

在单文件程序中,可以作为变量声明;

在多文件程序中,可以用来引用其他文件中定义的变量。

是全局和静态存储变量。

一般地,对于某个文件中的extern变量,先在编译时在本文件里找外部变量的定义,如果找到,就在本文中扩展作用域,如果找不到,则在连接时从其他文件里找,如果找到,就将作用域扩展到本文件,否则报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值