变量存储类型(auto static extern)

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 数据类型变量名;

时间: 2024-12-27 23:50:33

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

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

总结 1).在c语言中每一个变量和函数有两个属性:数据类型和数据的存储类别. 2). 对数据型(如整型.字符型等).存储类别指的是数据在内存中存储的方式. 存储方式分为两大类: 静态存储类和动态存储类 具体包括四种:{自动的(auto), 静态的(static), 寄存器(register), 外部的(extern)}. 根据变量的存储类别, 可以知道变量的作用域和生存期. 例如: 局部变量: 自动变量: int main(void){int a, b, c; 自动变量} 静态局部变量: int

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

1.C语言中每个变量都有3个性质:存储期限.作用域.链接 1)存储期限:变量的存储期限决定了为变量预留的内存被释放的时间.共2种,自动存储期限(auto),静态存储期限(static),自动存储(auto)的变量在所属块被执行时获得内存单元,并在块终止时释放内存单元,自动的获得或释放内存,故名auto.具有静态存储的变量(static)在程序运行期间始终占有同一内存单元,静止不变,故名static. 2)作用域:变量的作用域指可以使用该变量的那一部分程序文本.共2种,块作用域指从声明位置到所在块

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

http://blog.csdn.net/zhandoushi1982/article/details/5425835 一)auto:auto称为自动变量(局部变量).局部变量是指在函数内部说明的变量(有时也称为自动变量).所有的非全程变量都被认为是局部变量,所以auto实际上从来不用.局部变量在函数调用时自动产生,但不会自动初始化,随函数调用的结束,这个变量也就自动消失了.下次调用此函数时再自动产生,还要再赋值,退出时又自动消失.二)static:static称为静态变量.根据变量的类型可以分

C语言中变量存储类型有哪些?

变量的存储类型是C语言的重要组成部分,也是C语言学习的基础.那C语言中变量的存储类型有哪几种呢?在编程过程中又该怎样运用呢?就这一问题,我今天给大家介绍一下!总的来说,C语言中变量的存储类型可以分为四种,他们分别是自动变量.静态变量.外部变量和寄存器变量这四种,他们的说明符依次是:auto.static.extern和register. 一.auto auto称为自动变量. 局部变量是指在函数内部说明的变量(有时也称为自动变量).用关键字auto进行说明,当auto省略时,所有的非全程变量都被认

Linux C笔记之 变量存储类型 详解

存储类型: 变量的存储类型是指存储变量值的内存类型 : 变量的存储类型决定变量何时创建.何时销毁以及它的值将保存多久 : 存储变量:普通内存.运行时堆栈.硬件寄存器: 变量的缺省存储类型取决于它的声明位置: 静态(static)变量: 在代码块之外声明的变量,存储于静态内存中,也就是不属于堆栈的内存. 静态变量,无法为它指定其他存储类型.它在程序运行之前创建,在程序的整个执行期间始终存在.它始终保持原先的值,除非给他赋一个不同的值或者程序结束. 自动(automatic)变量: 在代码块内部声明

interface变量存储类型

我们知道interface的变量里面可以存储任意类型的数值(该类型实现了interface).那么我们怎么反向知道这个变量里面实际保存了的是哪个类型的对象呢?目前常用的有两种方法: Comma-ok断言 Go语言里面有一个语法,可以直接判断是否是该类型的变量: value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,element是interface变量,T是断言的类型. 如果element里面确实存储了T类型的数值,那么ok返回true,否则返回fa

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

C变量和函数的存储类型

C变量和函数的存储类型 在上一篇<C程序内存管理>的文章中,已经知道了C语言编译后的可执行文件的存储结构以及运行时的内存布局,本文则记录C语言中变量和函数的存储类型,以及在内存中的一些行为. C语言中变量的声明/定义格式如下: 存储类型    类型修饰符    数据类型    变量名; 存储类型:用来指明变量的存储位置,即运行该变量在哪一段分配内存空间,常见的存储位置有auto.extern.register.static,在一段执行程序中,可以为变量分配存储空间的有BSS.数据区.栈区.堆区

C语言入门(十四)变量的作用域和存储类型

变量的作用域和存储类型 一.作用域和生存期 C程序的标识符作用域有三种:局部.全局.文件.标识符的作用域决定了程序中的哪些语句可以使用它,换句话说,就是标识符在程序其他部分的可见性.通常,标识符的作用域都是通过它在程序中的位置隐式说明的. 1.局部作用域 前面各个例子中的变量都是局部作用域,他们都是声明在函数内部,无法被其他函数的代码所访问.函数的形式参数的作用域也是局部的,它们的作用范围仅限于函数内部所用的语句块. void add(int); main() { int num=5; add(