C语言的存储类型和关键字extern、static
1、C语言中每个变量都有3个性质:存储期限、作用域、链接
1)存储期限:变量的存储期限决定了为变量预留的内存被释放的时间。共2种,自动存储期限(auto),静态存储期限(static),自动存储(auto)的变量在所属块被执行时获得内存单元,并在块终止时释放内存单元,自动的获得或释放内存,故名auto。具有静态存储的变量(static)在程序运行期间始终占有同一内存单元,静止不变,故名static。
2)作用域:变量的作用域指可以使用该变量的那一部分程序文本。共2种,块作用域指从声明位置到所在块的末尾均可见,文件作用域指从声明的地方到文件的末尾均可见。
3)链接:变量的链接指程序的不同部分可以共享此变量。共3种,外部链接指可以被程序中不同文件共享,内部链接指只属于单独一个文件,无链接指属于单独一个函数,而且根本不能被共享。
2、变量的默认存储期限、作用域、链接均依赖于变量的声明位置。
1)在块内声明的变量:自动存储期限、块作用域、无链接。
2)在程序最外层(任意块外部)声明的变量:静态存储期限、文件作用域、外部链接。
int i; //静态存储,文件作用域,外部链接
void f(void){
INT J; //自动存储,块作用域,无链接
}
3、static的特殊用途:
1)当在块外部,static说明变量为内部链接,注意:本来在块外部声明的变量具有外部链接,加上static后,变为内部链接,则外部不可见了。
2)当在块内部,static说明变量的存储期限为静态,注意:本来在块内部变量为自动存储期限。
static int i; //静态存储期限,文件作用域,内部链接
void f(void){
static int j; //静态存储,块作用域,无链接
}
C语言的存储类型和关键字extern、static的更多相关文章
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
Technorati 标签: C,标识符,作用域,命名空间,链接属性,生命周期,存储类型,scope,name space,linkage,storage durations,lifetime 无论学 ...
- C语言存储类型及各存储类型作用域和生存域比较
c语言中的存储类型有`auto`, `extern`, `register`,`static` 这四种,存储类型说明了该变量要在进程的哪一个段中分配内存空间,可以为变量分配内存存储空间的有数据区.BB ...
- C语言存储类型
看c专家编程,有说存储类型一直不太清楚.看到一篇文章讲解c的存储类型,讲解了c语言中的各种变量的存储类型,而且是从进程.内存的角度讲解的,以前从没有这样理解过,觉得挺有用的,在这里转载过来. 首先要来 ...
- C语言中【变量】的存储类型共有4种类型
在C语言中,对变量的存储类型说明有以下四种: auto 自动变量 (动态存储) register 寄存器变量(动态存储) extern 外部变量(静态存储) ...
- C语言中存储类别、链接与内存管理
第12章 存储类别.链接和内存管理 通过内存管理系统指定变量的作用域和生命周期,实现对程序的控制.合理使用内存是程序设计的一个要点. 12.1 存储类别 C提供了多种不同的模型和存储类别,在内存中 ...
- C06 变量和存储类型
目录 全局变量 局部变量 存储类型 全局变量和局部变量 变量的作用域 作用域:某些事物起作用或有效的区域. 变量的使用范围称为变量的作用域. 变量的作用域决定了变量的可操作性和有效性. C语言变量的作 ...
- 如何判断c语言的变量类型
变量三要素: 一个变量有三个基本的要素,变量的名称,变量的类型,变量的值.所以int a = 10; 变量名为a,变量的存储类型为int型,变量的值为10. 变量还有一些属性如作用范围和存储类型. 变 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- 关于extern和static关键字引出的一些关于作用域和链接属性和存储类型的问题
在进入正题前我们必须了解一些概念: 标识符:标识符不仅仅代表着变量的名字,main()函数的main也是一个标识符,这点很重要. 存储类型:即变量的存储位置及其生存周期:静态区:分为两块 .date ...
随机推荐
- 针对ie的hack
/* 针对ie的hack */ selector { property: value; /* 所有浏览器 */ property: value\9; /* 所有IE浏览器 */ property: v ...
- https://github.com/wytings
博客中写了很多比较杂乱的东西,有时候可能一时看不出效果,毕竟代码问题确实是 “Talk is cheap. Show me the code” 所以,就开了一个github,把一些日常开发和使用的工具 ...
- 屏幕实时显示键盘鼠标操作软件keycastow,适合做视频教程
屏幕实时显示键盘鼠标操作软件keycastow,适合做视频教程 学习了:https://www.52pojie.cn/thread-535154-1-1.html 进行键盘按键的屏幕实时显示:
- Android研究之动态创建UI界面具体解释
Android的基本UI界面一般都是在xml文件里定义好,然后通过activity的setContentView来显示在界面上.这是Android UI的最简单的构建方式.事实上,为了实现更加复 ...
- C#基础视频教程7.5 如何编写简单游戏
有一些BUG需要处理,比如小鸟太高或者太低都应该报错(不然直接掉到窗口下面去了),这个方法跟前面的HitTest应该独立开来,而不是掺和在一起 测试确实可以检测是否超过边界(如果要非常精确,那么就 ...
- Android 使用ORMLite 操作数据库
参考:http://blog.csdn.net/cjjky/article/details/7096987 ormlite 方法查询:http://ormlite.com/javadoc/ormlit ...
- 一些C++11语言新特性 - Uniform Initialization
1. Uniform Initialization , , }; std::vector<, , , , , , }; std::vector<std::string> cities ...
- 算法笔记_136:交替字符串(Java)
目录 1 问题描述 2 解决方案 1 问题描述 输入三个字符串s1.s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成且不改变s1和s2中各个字符原有的相对顺序. 2 解决方案 ...
- CentOS 6.5下二进制安装 MySQL 5.6
CentOS 6.5 二进制安装MySQL 5.6 1:查看系统版本 [root@10-4-5-9 mysql]# cat /etc/redhat-release CentOS release 6.5 ...
- Linux dig
安装dig: yum install bind-utils dig 常用命令: # dig 最基本的用法dig @server sina.com.cn. # 用 dig 查看 zone 数据传输 di ...