C语言中的存储类型主要有四种:auto、static、extern、register

★auto存储类型

默认的存储类型。在C语言中,假设忽略了变量的存储类型,那么编译器就会自己主动默认为auto型

★register存储类型

寄存器变量。寄存器位于CPU,它的特点是:容量小、速度快。它一般用来暂存程序中使用频繁的变量、或者一些中间变量等,能提高程序的运行速度。

此类别的变量会优先分配寄存器。

★static存储类型

static定义的变量都是静态变量,用于限制作用域,不管是全局变量还是局部变量都存储在数据段上。这个keyword的作用主要在三个方面:局部变量、全局变量、函数

●应用于局部变量

对于一个存储类型声明为static的局部变量来说,它的作用域没有什么变化,仅仅有定义该局部变量的函数能够使用它。可是。它的生命周期发生了变化。普通的局部变量的声明周期为定义它的函数的运行长度,当定义它的函数运行完后。局部变量就会被取消。可是对于static的局部变量来说,它的生命周期就是整个的函数运行期间

●应用与全局变量

对于一个存储类型声明为static的全局变量来说。其生命周期没有什么变化,在程序运行期间,该变量一直存在,可是其作用于反而减小。由于定义为static类型的全局变量仅仅有本文件的函数能够使用。

为什么全局变量定义成static类型后,其作用域会变小呢?

由于在一个project中。不仅仅是包含一个源文件,可能会包含非常多的源文件。

普通的全局变量在其它的源文件里是可见的,它的作用域是整个的project,其它的文件要想引用该全局变量仅仅要用extern声明一下就能够使用了。

可是,当声明为static后,它的作用域就仅仅限于本源文件使用,该全局变量对于其它的文件都是隐藏的,不可见的。

事实上,statickeyword有非常多的优点。在程序设计中,不同的人完毕不同的模块,为了防止不同的模块之间使用重名的全局变量。在每一个模块的全局变量前面加上一个static就可以。还有。假设本文件的外部变量不须要其它的文件引用。那么能够将其设置为static的静态外部变量,从而避免其它文件的误用!

●应用与函数

在一个函数前面加上static,那么这个函数的作用域仅限于本文件使用。对其它的文件是不可见的。

★extern存储类型

该存储类型主要是为了引用其它文件的全局变量和函数的。

【C语言学习】存储类型的更多相关文章

  1. C语言学习笔记--类型定义&联合

    一.类型定义 C语言自定义数据类型 (typedef) C语言提供一个叫做typedef的功能来声明一个已有的数据类型的新名字. typedef int Length; 使得Length成为int类型 ...

  2. C语言的存储类型和关键字extern、static

    1.C语言中每个变量都有3个性质:存储期限.作用域.链接 1)存储期限:变量的存储期限决定了为变量预留的内存被释放的时间.共2种,自动存储期限(auto),静态存储期限(static),自动存储(au ...

  3. go语言学习--map类型的切片

    今天在项目中遇到了一个切片的map,记录下map切片的使用 package main import "fmt" func main() { // Version A: items ...

  4. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  5. C06 变量和存储类型

    目录 全局变量 局部变量 存储类型 全局变量和局部变量 变量的作用域 作用域:某些事物起作用或有效的区域. 变量的使用范围称为变量的作用域. 变量的作用域决定了变量的可操作性和有效性. C语言变量的作 ...

  6. C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型

    Technorati 标签: C,标识符,作用域,命名空间,链接属性,生命周期,存储类型,scope,name space,linkage,storage durations,lifetime 无论学 ...

  7. C语言存储类型及各存储类型作用域和生存域比较

    c语言中的存储类型有`auto`, `extern`, `register`,`static` 这四种,存储类型说明了该变量要在进程的哪一个段中分配内存空间,可以为变量分配内存存储空间的有数据区.BB ...

  8. Go语言学习(四)经常使用类型介绍

    1.布尔类型 var v1 bool v1 = true; v2 := (1==2) // v2也会被推导为bool类型 2.整型 类 型 长度(字节) 值 范 围 int8 1  128 ~ 12 ...

  9. C语言存储类型

    看c专家编程,有说存储类型一直不太清楚.看到一篇文章讲解c的存储类型,讲解了c语言中的各种变量的存储类型,而且是从进程.内存的角度讲解的,以前从没有这样理解过,觉得挺有用的,在这里转载过来. 首先要来 ...

随机推荐

  1. VS2015 启用“仅我的代码”

    在调试网站的时候,如果不勾选 [启用"仅我的代码"],会跳出一大堆异常,但是异常不作处理,非常烦人: 解决办法就是在 [调试]->[选项]->[勾选 启用"仅 ...

  2. JavaSE复习日记 : 八种基本数据类型

    /* * 基本数据类型 * * Java里的8种基本数据类型: * byte --- 1 byte = 8 bit; * short --- 2 byte = 16 bit; * int --- 4 ...

  3. BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )

    tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...

  4. JAVA中把ResultSet转换成LIST

    项目中老是遇到数据库异常关闭的情况,真烦, 想用hibernate呢,那个玩意儿又太笨重,感慨C#和PHP的舒适方便性,模拟TP写了个数据处理层,将就用着先代码里有很多项目中的东西,不要直接COPY了 ...

  5. MYSQL异常和错误机制

    BEGIN ; ; ; START TRANSACTION; call put_playerbehavior(i_playerid,i_gameid,i_channelid,i_acttime,@a) ...

  6. Python之三层菜单

    三层菜单,根据用户所选数字,进入子菜单.一级一级呈现. menu = { 'Beijing': { "ChaoYang": { "CBD": ['CICC', ...

  7. 基于FPGA的信号消抖

    上一篇写了一个按键消抖,按键消抖需要一个计数器.可是有些信号是不需要这么负责的,仅仅是抖动而已.于是我在上一篇博文的基础上做了一点修改,于是有了这个信号消抖的程序 module sig_nojitte ...

  8. NET Core,Ubuntu运行

    NET Core,如何开发跨平台的应用并部署至Ubuntu运行 之前写了一篇博文宣布Rabbit Rpc跨平台了“拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc”,在过程中尝试了如 ...

  9. LintCode-比较字符串

    题目描述: 比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是 大写字母 注意事项 在 A 中出现的 B 字符串里的字符不需要连续或者有序. 样例 给出 A = " ...

  10. Tomcat+redis+nginx配置

    为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架.相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇 ...