auto 动态存储类型变量(函数内部变量存储默认为 auto型)

  auto只用于函数内部定义,单片机在执行这个函数时为它分配内存地址,当函数执行完毕返回后,auto变量会被销毁,再次进入这个函数时,它的初值是不确定的,必须对她重新进行初始化。auto变量是局部变量,只允许在定义它的函数内部使用,在函数外的其他地方都不能使用。由于auto变量在定义它的函数以外的任何地方都是不可见的,所以允许在这个函数以外的其他地方或是其他函数内部定义同名的变量,它们之间是不会发生冲突的,因为他们都有自己的区域性,在实际的代码中一般都省略这个关键词,函数的形式参数默认也是auto。

auto变量定义格式为:

auto 数据类型 变量名;

static静态存储类型变量

  static可用于函数内部变量定义,也可用于函数外部变量定义。在函数内部,static的基本用途是允许一个变量在重新进入这个函数是能够保持原来的值,static静态变量在程序运行期间自始至终占用被分配的存储地址。在函数内部用static定义的变量在函数初次运行时进行初始化工作,且只操作一次,以后每次调用函数时不再重新赋初值而只引用上次函数调用结束时的值,如果程序代码没有对static变量赋初值,编译器会自动赋值0或空字符。在函数内部使用static定义的变量时局部变量,只能在定义该变量的函数内使用该变量,推出函数后,尽管静态局部变量还继续存在,但不能使用它。

  static还有第二种含义,为了限制全局变量或函数的作用域,全局变量或函数前加static使得函数变成静态函数,但此处static的含义不是指定存储类型,而是对函数的作用域局限于本文件,其他文件不可使用,所有又称内部函数。使用内部函数的好处是不同的人编写的不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数产生同名冲突。使用static定义的静态全局变量和外部全局变量的差别在于,外部全局变量可以同时给多个文件使用,而静态全局变量则只能给定义此变量的文件使用。对于全局变量,不论是否使用static限制(即全局变量和静态全局变量),它们都一直占用内存地址不释放。

  把局部变量改变为静态局部变量后改变了他的生存期,把全局变量改变为静态全局变量后改变了他的作用域,限制了他的适用范围。

静态变量定义格式为:

static 数据类型 变量名;

extern外部变量

  在所有函数之外定义的变量称之为全局变量,全局变量可以在定义时赋初值,若不赋初值,则系统自动定义它们的初值为0。有static限制的全局变量称为内部全局变量,无static限制的全局变量成为外部全局变量。在代码量大的程序中,一般会把代码分类放到多个*.c文件中,如果要在一个C文件中使用另外一个C文件中已经定义的全局变量,就必须使用extern关键字。

  extern是变量声明关键字,而非定义,是引入其他C文件中已定义的非static全局变量,比如:“extern int a;”这里声明了一个变量a,并把这个变量的类型和变量名告诉编译系统是编译系统不再为它分配内存地址,这个a是在其他文件已经定义并且分配了内存地址的。外部变量声明语句的位置可以是在引用它的函数的内部,也可以在应用它的函数的外部。如果变量声明在函数外部,那么同一个C文件内的所有函数都可以使用这个外部变量;反之如果在函数内部,那么只有这一个函数可以使用该变量。

  注意,extern和static本身就是对立的关键字,使用extern是为了不同文件都可使用外部某个变量。

外部变量声明格式为

extern 数据类型变量名;

变量存储类型(auto static extern)的更多相关文章

  1. 存储类型auto,static,extern,register的区别 <转>

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

  2. 在C中判断变量存储类型(字符常量/数组/动态变量)

    在C中判断变量存储类型(字符常量/数组/动态变量) 在chinaunix论坛上有人问到关于变量存府类型的问题,我觉得可以写个测试代码加深大家对内存使用和布局的理解.下面我把原问题及处理办法贴出来,限供 ...

  3. c 变量的存储类型auto等(基础知识)和c函数变量

    总结 1).在c语言中每一个变量和函数有两个属性:数据类型和数据的存储类别. 2). 对数据型(如整型.字符型等).存储类别指的是数据在内存中存储的方式. 存储方式分为两大类: 静态存储类和动态存储类 ...

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

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

  5. C和C指针小记(六)-基本声明、指针声明、typedef 、常量、作用域、链接属性、存储类型、static

    1.变量的声明 声明变量的基本形式: 说明符号(一个或者多个) 声明表达式列表 说明符 (specifier) 包含一些关键字,用于描述被声明的标识符的基本类型,它也可用户改变标识符的缺省存储类型和作 ...

  6. C语言支持的四种变量存储类型

    http://blog.csdn.net/zhandoushi1982/article/details/5425835 一)auto:auto称为自动变量(局部变量).局部变量是指在函数内部说明的变量 ...

  7. 【精】C语言之变量存储类型

  8. C语言中变量的存储类型

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

  9. C06 变量和存储类型

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

随机推荐

  1. Struts2_Struts标签

    1.property <s:property value="username" /> 一般访问,访问ValueStack中的第一个username <s:prop ...

  2. SharePoint 和 Windows Phone 7 开发人员培训资源

     该工具包包括单位数目: Windows Phone 7 发展简介 在本单元中,您将了解真实的消费信息存储在 SharePoint 中与你用 Visual Studio 写 Windows Phone ...

  3. Springboot中SpringMvc拦截器配置与应用(实战)

    一.什么是拦截器,及其作用 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对 ...

  4. vos设置可呼出手机或固话

    问题: 默认公司只让呼出手机号码,但有的客户要求能打固话,怎么办? 落地网关——补充设置——落地前缀——落地被叫改写规则 在改写规则里添加固话号段即可 具体案例: 5201——1表示让520号段只能拨 ...

  5. CRM, C4C和Hybris的工作流简介

    CRM的例子 Step by Step to debug IC inbox workflow WS14000164 C4C Custom recipient determination in work ...

  6. php curl使用总结(一)

    今天和第三方支付做对接的时候,在本地用wamp(php版本5.4.14)运行他们的支付demo的时候,报了一个错误.loadXML函数中不能传空值.排查代码的时候,发现他们用了curl,我以前也接触过 ...

  7. 【P1330】 封锁阳光大学

    两个和谐河蟹不能在同一条边的两端.所以对于每条边.只有一个节点有和谐河蟹 所以说,我们可以将有和谐河蟹的看做一种颜色,或则是状态.没有河蟹看做另一种言颜色 这样边变成了二分图染色 所以嗯~(・∀・) ...

  8. Git基础篇

    对于Git的一些基础了解,安装,里面的一些名词,这里就不做介绍了.主要记录怎么使用GIt. 本篇介绍: 配置个人信息        生成本地仓库并与远程库相连        添加SSH秘钥       ...

  9. 记一次EBS正式环境补丁安装的过程

    因菏泽能源上线需求,需要在8009上修复集团8000环境上已经修复的所有补丁程序,修复前做应用及数据库层备份,完成修复后解决并发管理器无法启动的问题.此为概述. 应用层备份 应用层的备份采用直接压缩备 ...

  10. Java反射+注解案例

    注解类代码,注解的属性可以有多个: package reflect; import java.lang.annotation.Retention; import java.lang.annotatio ...