1.生存期

1.c语言的变量拥有俩种生存期
——静态存储期
——自动存储期
2.相关内容
一:具有文件作用域的变量属于静态存储期,函数也属于静态存储期。属于静态存储期的变量在程序执行期间将之一占据存储空间,直到程序关闭才释放。
二:具有代码块作用域的变量一般情况下属于自动存储期。属于自动存储期的变量在代码块结束时将自动释放存储空间。
3.代码解释

#include <stdio.h>int A;
static int B;
extern int C;//告诉编译器在其他地方定义过,不要着急报错
//以上三个变量A,B,C都是文件作用域,以此这三个变量是静态存储期
//包括以下的 func和main函数也是静态存储期,只有关闭程序时,才会释放内存空间void func(int m, int n)//参数为自动存储期
{int a, b, c;//a,b,c为自动存储期}
//执行完这个函数后,a,b,c,m,n将被释放内存空间int main(void)
{int i, j, k;//i,j,k静态存储期return 0;
}

存储类型

1.c语言存储类型的分类
——auto
——register
——static
——extern

一: auto
在代码块中声明的变量默认的存储类型就是自动变量,使用关键字auto来描述。
代码讲解:

#include <stdio.h>
int main(void)
{auto int i, j, k;//由于是默认的存储类型,所以一般auto不写//变量被定义的时候,其默认值有自动存储类型,none链接属性return 0;
}

一般写auto是为了区分全局和auto类型变量,如下:

#include <stdio.h>int i;int main(void)
{auto int i;//目的是为了强调覆盖全局变量的ireturn 0;
}

二:register(寄存器)变量

  1. 将一个变量声明为寄存器变量,那么该变量就有可能被存放于CPU的寄存器中。
  2. 寄存器变量和自动变量在很多方面是一样的,它们拥有代码块作用域,自动存储期和空链接属性。
  3. 如果太多变量被声明为register,它只选取前几个存储与寄存器中,其余的按普通自动变量处理。
  4. 如果一个编译器自己具有一套寄存器优化方案法,它也可以忽略register关键字,编译器将自己决定哪一个是寄存器变量。

三:static变量

  1. 使用static来声明局部变量,那么就可以将局部变量指定为静态局部变量。
  2. static使得局部变量具有静态存储期,所以它的生存期与全局变量一样,直到程序结束才释放。
#include <stdio.h>void func(void);void func(void)
{static int count = 0;//改变了count的生存期,存储类型,但是作用域没有改变。printf("count=%d\n", count);count++;
}int main(void)
{int i;//作用域没有改变证明  //count++;此处没有注释会出错for (i = 0; i < 10; i++){func();//count的值始终保存上一次的值,知道程序结束}return 0;
}


没有static关键字时:

## 四:extern

extern 该关键字是用来告诉编译器这个变量和函数在其他的地方已经定义过,先去寻找,不要着急报错。

<C和指针>---生存期和存储类型相关推荐

  1. 变量的生存期与存储类型

    变量的生存期与存储类型 1.变量的生存期 2.变量的存储类型 [1]自动变量 [2]外部变量 [3]静态变量 内部静态变量 外部静态变量 [4]寄存器变量 附:总结表 1.变量的生存期 所谓变量的生存 ...

  2. C语言——生存期和存储类型、递归、递归求解汉诺塔、快速排序

    目录 一.生存期和存储类型 1.生存期 2.存储类型 3.自动变量(auto) 4.寄存器变量(register) 5.静态局部变量(static) 6.static 和 extern 二.递归 1. ...

  3. C语言再学习 -- 存储类型关键字

    定义: 是对声明的实现或者实例化.连接器(linker)需要它(定义)来引用内存实体.与上面的声明相应的定义如下:参看:C语言再学习 -- 存储类.链接 C语言中有 5 个作为存储类说明符的关键字,分 ...

  4. 存储类型auto,static,extern,register的区别

    变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种. 内存中.具体点来说内存分为三块:静态区,堆 ...

  5. 存储类型auto,static,extern,register的区别 转

    变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种. 内存中.具体点来说内存分为三块:静态区,堆 ...

  6. C语言:存储类型,内存管理

    一.存储类型 在定义一个数据(变量/数组)的时候,除了需要定义数据类型外,还需要定义存储类型.数据类型用于说明变量的长度和存储方式,而存储类型用于说明变量的使用规则 1.存储类型的分类 <1&g ...

  7. C++变量作用域、生存期、存储类别

    写C.C++代码的小伙伴一定在头疼变量的作用域.生存期.存储类别问题.什么静态.外部.寄存器.局部.全局搞得一头雾水.今天咱们就来梳理一下他们的变态关系(什么不得了的事情???) 1.变量的作用域 说 ...

  8. C语言中【变量】的存储类型共有4种类型

    在C语言中,对变量的存储类型说明有以下四种:   auto          自动变量 (动态存储) register     寄存器变量(动态存储) extern       外部变量(静态存储) ...

  9. c语言实参的默认存储类型,2016下半年软考程序员练习习题及答案解析(一)

    下面是由希赛小编整理的2016下半年软考程序员练习习题及答案解析(一),提供给大家学习,希望能帮助学友们.具体内容如下: 练习习题 1.如果某个函数在定义时,省略了存储类型,则默认的存储类型是() A ...

最新文章

  1. Gitlab 官方对整个数据删除事件的详细说明
  2. PI实时数据库管理员须知-5
  3. python第三方库安装-python的第三方库安装
  4. Intellij Idea生成serialVersionUID的方法
  5. Vs2010与VC的区别
  6. 解决mysql插入中文出现错误Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F...‘ for column ‘course‘ at row 1
  7. Magento微信支付接口开发小记
  8. 卧式储罐液位体积计算公式excel_2020晋中化工防腐储罐订做欢迎来电-环保设备...
  9. Android中的armeabi等如何适配
  10. php微信推送的模板信息内容都是空,微信模板消息 推送成功 但是内容显示空白...
  11. 软件开发学习资料大全
  12. Angular - FormGroup 踩坑合辑之:setValue,patchValue,reset
  13. linux解压文件并命名,linux命名压缩解压文件
  14. iomega ix2 Android,Lenovo Iomega ix2共享功能_联想 IOMEGA IX2_服务器评测与技术-中关村在线...
  15. RMON学习笔记(二)
  16. python打开文件,路径存在'\t'被转义
  17. bmob php支付,个人开发者也能盈利!Bmob支付SDK使用实例
  18. 简单的计算机程序图,技巧:只需几个简单的步骤,即可使用Office工具离线识别图片文字...
  19. java.lang.IllegalArgumentException: java.security.InvalidKeyException: Illegal key siz
  20. linux禁用用户账号,linux 如何禁用账号和解除禁用账号

热门文章

  1. 计算机桌面有个方框,电脑屏幕的白色方框怎么清除
  2. 《机电传动控制》——直流电机调速仿真作业
  3. html在ie浏览器中中文为什么是乱码
  4. 电影《魔兽》教会我们一个道理,粉丝的力量是无穷的!
  5. 计算机职业生涯规划书一万字,大学生职业规划一万字
  6. 【装Linux系统时卡在logo处】禁用独显驱动
  7. 注册测绘师资格拟认定人员公示名单
  8. Kotlin初级(2)- - - 空安全.md
  9. php lumen 框架优点,微框架Lumen 特性
  10. 热身赛T3(奖学金评定)