`
lc52520
  • 浏览: 369255 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

C语言变量存储类型

阅读更多

C语言变量存储类型

auto
static
extern
static extern
register

auto 局部变量

     auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回.在大括号{}内声明.
     自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函数内部使用它。在函数外的其他任何地方都不能使用的变量。自动变量是局部变量,即它的区 域性是在定义他的函数内部有效。当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他。由于自动变量在定义他的函数的外面的任何地方都是不可 见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同名的变量,他们之间不会发生冲突的。因为他们都有自己的区域性,而且它没有链接性 (即:不允许其他的文件访问他的)。来看看自动量的持续性。计算机在执行这个函数的时候,创建并为它分配内存,当函数执行完毕返回后,自动变量就会被销 毁。这个过程是通过一个堆栈的机制来实现的。为自动变量分配内存就压栈,而函数返回时就退栈。

static 静态变量


一、局部静态变量
局部变量按照存储形式可分为三种auto, static, register。
与auto类型(普通)局部变量相比, static局部变量有三点不同:
1. 存储空间分配不同
auto类型分配在栈上, 属于动态存储 类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储 区, 在程序整个运行期间都不释放. 两者之间的作用域(有效范围)相同, 但生存期不同.
2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次
3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符 , 而auto类型的初值是不确定 的.
特点: static局部变量的”记忆性 ”与生存期的”全局性”
所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值. 

注意事项:
1. “记忆性”, 程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 造成不同时刻至运行的结果可能不同.
2. “生存期”全局性和唯一性. 普通的local变量的存储空间分配在stack上, 因此每次调用函数时, 分配的空间都可能不一样, 而static具有全局唯一性的特点, 每次调用时, 都指向同一块内存, 这就造成一个很重要的问题 ---- 不可重入性!!!

二、外部静态变量/函数
在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。, 但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数 )。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。


extern 变量

外部变量 定义在程序外部,所有的函数很程序段都可以使用.

外部变量可能会在某一程序段被重新定义,以段内变量为参考值.

static extern 变量

静态外部变量和外部变量差别在于,外部变量生命可以同时给多个文件使用,而静态外部变量则只能给声明此变量的文件使用.

register 变量

寄存器变量,是由寄存器分配空间,访问速度比访问内存快,加快执行速度.寄存器大小有限.

在c语言当中可以使用寄存器变量来优化程序的性能,最常见的是在一个函数体当中,将一个常用的变量声明为寄存器变量: register int ra; 如果可能的话,编译器就会为它分配一个单独的寄存器,在整个函数执行期间对这个变量的操作全都是对这个寄存器进行操作,这时候就不用频繁地去访存了,自然 就提高了性能。
不能用于全局变量。现在的情况是VC忽略用户定义的REGISTER,因此定义一个REGISTER变量与不定义一个 REGISTER是一样的,编译器进行相同的优化,因为MS认为,REGISTER是系统中宝贵的资源,应该由系统统一调配,而且认为VC编译器的优化能 力要大于一般的程序员。因此也有人说register关键字在PC机(x86CPU)无用,编译器按自动变量处理。
注意: register是不能取址的。
register   int   j;   int   *p   =   &j;是错的,因为无法对寄存器的定址。

分享到:
评论

相关推荐

    如何合理设置C语言变量.pdf

    "C语言变量存储类型和数据类型分析" 本文将从C语言变量的存储类型和数据类型的角度出发,对C语言变量的五种存储类型(auto、register、static、extern、const)进行详细分析,并探讨如何合理设置C语言变量的存储...

    C语言变量命名规则

    变量是用来存储数据的容器,它们可以持有各种类型的值,如整数、浮点数或字符。变量名是你在程序中用来引用这些存储位置的标识符。 1. **变量命名的基本规则**: - 变量名必须以字母(a-z, A-Z)或下划线(_)开头...

    51单片机C语言变量定义.pdf

    标题《51单片机C语言变量定义》和描述《51单片机C语言变量定义》揭示了本文档主要围绕51单片机使用C语言进行编程时变量定义的具体知识点展开。51单片机通常指的是基于Intel 8051微控制器架构的一系列微控制器,广泛...

    C语言的变量的作用域和存储类型

    介绍了C语言的变量的作用域和存储类型,一维字符数组和字符串变量等。

    C语言变量名命名规则

    在C语言中,还有一种特别的变量类型——枚举(enum),它允许我们为整数常量定义友好的名称。例如: ```c enum Colors {Red, Green, Blue}; ``` 这里的`Red`、`Green`和`Blue`就是枚举变量,它们分别代表整数值0、...

    C语言的变量PPT课件.pptx

    3.3.1 变量的存储类型分为静态存储和动态存储。静态存储变量(如全局和静态变量)在整个程序运行期间保留内存,而动态存储变量(如局部自动变量)在需要时分配和释放内存。 3.3.2 自动型变量是最常见的,通常存储在...

    单片机中断和C语言变量类型

    变量的声明,就是告诉编译器,要在内存当中划出一块空间来存储该变量,而这个空间的大小跟变量的数据类型有关,比如char类型、int类型、long类型等等,不同的操作系统和编译器相应的数据类型......

    C语言程序设计:第7章 函数及变量存储类型.ppt

    C语言程序设计:第7章 函数及变量存储类型.ppt

    C语言中的整型变量类型

    在C语言中,整型变量是用来存储整数的变量,它们是程序中最基本的数据类型之一。C语言提供了多种整型变量类型,以满足不同场景下的存储需求。本文将详细介绍C语言中的整型变量类型及其特点。 C语言是一种广泛使用的...

    C语言变量的地址.pdf

    本文将深入探讨C语言变量的地址及其相关概念。 首先,内存可以看作是一个巨大的数组,由无数个称为字节(Byte)的小单元组成,每个字节有自己的地址。对于C语言中的变量,它们的地址通常是十六进制表示的数字,如0x...

    C语言的变量剖析.pdf

    "C语言变量剖析" C语言是一种高级程序设计语言,随着计算机和互联网的普及,它已经成为大中专院校计算机专业和非计算机专业的必修科目。但是由于C语言语法多、数据类型丰富等诸多问题,学好、学精并不容易。其中之...

    C语言 变量详解及示例代码

    本文将深入探讨C语言变量的基础知识,包括变量的定义、声明、类型,以及左值和右值的概念。 首先,理解变量的本质至关重要。在C语言中,变量是程序内存中的一块区域,它具有特定的类型,决定其存储的大小和能存储的...

    C语言变量及赋值共2页.pdf.zip

    "C语言变量及赋值"是学习C语言的基础,下面将详细讲解这一主题。 变量在C语言中是存储数据的容器,它具有特定的类型,比如整型(int)、字符型(char)、浮点型(float或double)等。变量在使用前必须先声明,声明时需要...

    C语言变量类型的深入分析

    C语言变量类型的深入分析 C语言变量类型是C语言编程的基础概念,理解变量类型的本质是编写高效、正确的C语言程序的关键。本文将深入分析C语言变量类型,探讨变量类型的本质、变量类型的作用、多级指针的理解等内容...

    c语言变量和常量的使用1

    每个变量都有特定的数据类型,如整型(int)、浮点型(float)、字符型(char)等,这些数据类型决定了变量能够存储的数据范围和处理方式。声明一个变量时,我们需要指定其类型和名称,例如: ```c int age; // 声明一个...

    谈谈C语言中的变量.pdf

    C语言中的变量有其生存期,变量的生存期决定了变量的存储类型和变量的作用域。变量的生存期可以分为自动存储期、静态存储期和寄存器存储期等。 变量的作用域 C语言中的变量有其作用域,变量的作用域决定了变量的...

    C语言变量声明与初始化:基础与进阶指南

    ### C语言变量声明与初始化:基础与进阶指南 在C语言编程中,变量作为程序中最基本的数据存储单元,其正确的声明与初始化是确保程序高效、稳定运行的关键。本文将全面解析C语言中的变量声明与初始化技巧,涵盖基础...

    C语言变量[归类].pdf

    - 寄存器变量(`register`):尝试将变量存储在CPU寄存器中以提高速度,但并不总是可行。 - 自动存储变量(默认):在函数调用时创建,调用结束后销毁。 2. 关键字: - 关键字是C语言预定义的具有特殊含义的...

    C语言学习笔记变量数组指针

    “类型”在C语言中非常重要,因为每种变量都必须有特定的类型,决定了它能存储的数据范围和执行的操作。例如,`int`类型用于整数,`float`用于浮点数,`char`用于单个字符。C语言还提供了其他类型,如`double`(双...

    C语言中变量的理解.pdf

    因此,每个C语言变量必须具有确定的数据类型,且变量的值必须符合其数据类型的规则。 变量的名字是一个标识符,用于程序员对变量进行标识。在C语言中,变量名的命名规则遵循标识符的命名规则,原则上可以是任意长度...

Global site tag (gtag.js) - Google Analytics