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. angularjs ng-if 慎用 备忘

    ng-if.ng-show一般情况下可以通用,二者的最明显区别就是: ng-if判断为false时,页面dom节点不会被创建,其子节点下也不会渲染,从而也就加快了dom的加载速度:ng-show则仅是 ...

  2. Windows server R2 2008上部署gogs git

      所需的环境 1.     安装mysql                       安装路径:F:\MySQL Server 5.7 2.     安装gogs                  ...

  3. Verilog八线 - 三线优先编码器设计(74LS148)

    百度百科_74LS148 if语句法 //8线-3线优先编码器设计(74LS148) // //EI | A7 A6 A5 A4 A3 A2 A1 A0 | Y2 Y1 Y0 GS EO //0 | ...

  4. Docker cgroup.procs no space left on device

    环境:centos6 运行docker 时 错误提示: System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1 ...

  5. April 12 2017 Week 15 Wednesday

    Genius often betrays itself into great errors. 天才常被天才误. Genius can help us get greater achievements, ...

  6. 运行npm update等命令出错后如何分析问题根源

    我今天工作时,在当前前端项目工作目录下执行命令npm update 结果遇到如下错误:registry error parsing json npm ERR! Unexpected token < ...

  7. postman 1—官网下载及安装

    测试过程中构造批量数据方式: 1 业务只关联数据库单张表,那么可以通过sql插入数据 也可以通过接口构造. 2 业务关联多张数据库表.要在多张表插入数据且保持数据的一致性,此时通过接口批量发送请求构造 ...

  8. LCA最近公共祖先(POJ1330)

    题目链接:http://poj.org/problem?id=1330 解题报告: 先将一个子节点,深搜每一个根节点,并标记. 然后深索另一个子节点,当发现访问过了,就找到了最近的公共祖先. #inc ...

  9. 2018.7.3 JS实现增删改查没有连接数据库

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. apache单ip配置多端口多站点

    1.修改 /etc/httpd/conf/httpd.conf 添加一个Listen,如: Listen 80 Listen 8001 Listen 8002 2.添加一个VirtualHost #v ...