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. c语言 Implement strStr()【Leetcode】

    实现在一个母字符串中找到第一个子字符串的位置. #include <stdio.h> #include <string.h> #define _IRON_TRUE 1 #def ...

  2. ArcGIS for Service中JavaScript预览在内网环境无法使用

    1.问题说明 在使用ArcGIS for Service时经常会遇到一个问题,那就是我们需要对已经发布的服务进行预览,预览时点击对应服务,选择View in中的ArcGIS JavaScript就可在 ...

  3. seattle language school & on-line degree

    http://www.kaplaninternational.com/ https://asuonline.asu.edu/online-degree-programs/ https://asuonl ...

  4. 洛谷 P1849 [USACO12MAR]拖拉机Tractor

    题目描述 After a long day of work, Farmer John completely forgot that he left his tractor in the middle ...

  5. 洛谷 P3905 道路重建

    题目描述 从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连.在经过一次严重的战争之后,有d条道路被破坏了.国王想要修复国家的道路系统,现在有两个重要城市A和B ...

  6. Maven安装以及使用

    maven安装 1.解压maven安装包 2.右键“计算机”,选择“属性”,之后点击“高级系统设置”,点击“环境变量”,来设置环境变量. 3. 新建系统变量 MAVEN_HOME 变量值:C:\apa ...

  7. POJ-3349 Snowflake Snow Snowflakes---最小表示法

    题目链接: https://vjudge.net/problem/POJ-3349 题目大意: 每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的.输 ...

  8. vuejs组件参数校验

    父组件向子组件传递一些参数,那么子组件有权对这些参数进行一个校验,这个就是组件参数校验 需求:父组件传递过来的必须是个字符串,这个要怎么去校验呢 <div id='root'> <c ...

  9. PHP APC安装与使用

    先要解决一下httpd-devel依赖库问题 yum install cyrus-sasl-devel db4-devel openldap apr apr-util apr-util-devel p ...

  10. VC-基础:VS2010/MFC-1MFC消息映射

    Windows消息分类 Windows消息分为系统消息和用户自定义消息.Windows系统消息有三种: 1.标准Windows消息.除WM_COMMAND外以WM_开头的消息是标准消息.例如,WM_C ...