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. slf4j+log4j配置(Maven)

    首先配置Maven依赖 <!-- http://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency& ...

  2. VC++ 编译过程

    一 前言 一开始编译C++代码的时候可能会对编译的错误觉得很难理解,搞不清楚究竟是哪里错了.了解编译过程,能够更好的处理编译错误. 二 名词解释 编译单元:当一个c或cpp文件在编译时,预处理器首先递 ...

  3. 搜索(BFS)

    Problem B: Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and t ...

  4. JZOI

    orz..kpm大神做的JZOI卡.很好看 目前是全球限量十张哈哈哈   (正面) (背面) 原图:

  5. LintCode- 删除排序数组中的重复数字

    题目描述: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 样例 给出数组A =[1,1 ...

  6. 不用注册热键方式在Delphi中实现定义快捷键(又简单又巧妙,但要当前窗体处在激活状态)

    第一步:在要实现快捷键的窗体中更改属性“KeyPreview”为True:第二步:在要实现快捷键的窗体中的OnKeyPress事件中填入一个过程名称(在Object Inspector中),填写好后回 ...

  7. 输出1到最大的N位数

    题目:输入数字n,按顺序输出从1最大的n位10进制数.比如输入3,则输出1.2.3一直到最大的3位数即999. 分析:这是一道很有意思的题目.看起来很简单,其实里面却有不少的玄机. 应聘者在解决这个问 ...

  8. HDU 3486 Interviewe

    题目大意:给定n个数的序列,让我们找前面k个区间的最大值之和,每个区间长度为n/k,如果有剩余的区间长度不足n/k则无视之.现在让我们找最小的k使得和严格大于m. 题解:二分k,然后求RMQ检验. S ...

  9. linux网络相关命令使用

    A,iptables使用示例 1,将请求80端口的包发送给本机8180端口(这样,别的机器访问本机的80端口时会被转发到8180端口去) iptables -t nat -A PREROUTING - ...

  10. android 关于LCD背光调节渐变过程引起背光闪烁问题

    如果背光渐变过程会引起背光闪烁,可以采取以下任意一种方法修改:   方法1.减少调节级别时间 http://blog.csdn.net/sergeycao   默认的设计在关闭背光时会有灭屏动画,就是 ...