您的位置:

c语言变量的作用域及存储类型,c语言变量的存储类型的定义及其使用

本文目录一览:

C语言之变量作用域

全局变量:作用域整个工程,在使用的地方通过extern声明即可,存放于全局数据区,占用静态存储单元。

局部变量:作用于函数方法体内,函数执行结束就释放,存放于栈区。

全局静态变量:作用于当前类,在外部类不可使用,除非使用#include引入头文件,存放于全局数据区。

局部静态变量:作用于函数方法体内,函数执行结束不释放,存放于全局数据区。

全局静态存储区:分为 DATA 段和 BSS 段。DATA 段(全局初始化区)存放初始化的全局变量和静态变量;BSS 段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。

静态存储变量的优势:

优势: 可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

关于static

(1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。

(2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。

(3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。

(4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static 修饰。

(5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)。

C语言中什么是局部变量,局部变量存在的各种形式及作用域

局部变量即内部变量,指在函数内部定义(也可认为在块内定义)的变量,其作用域仅为函数内部或块内。局部变量可以以auto(自动型)、(static)静态型、(register)寄存器型存储类型存在。

在C语言中,全局变量的存储类别是?

全局变量的存储类别是静态存储区。

变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。

全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。

由下图可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但x,y 定义在函数f1之后,而在f1内又无对x,y的说明,所以它们在f1内无效。 a,b定义在源程序最前面,因此在f1,f2及main内不加说明也可使用。

全局变量是使用相同的内存块在整个类中存储一个值全局变量extern与static,extern在其他源程序中也可以使用;static只能在本程序中使用。

扩展资料:

数据区可以分为静态数据区(全局数据区)和动态数据区,后者又可分为堆区和栈区。之所以这样划分,是因为它们存放的数据和对应的管理方法不同。

静态数据区、栈区和堆区的存储空间分别遵循3种不同的规则:静态存储分配、栈式存储分配和堆式存储分配。后两种分配方式皆称为“动态存储分配”,因为这两种方式中存储空间并不是在编译的时候静态分配好的,而是在运行时才进行的。 

某些编程语言,如早期的FORTRAN语言及COBOL语言等,其存储分配是完全静态的,程序的数据对象与其存储的绑定是在编译期间进行的,称为静态语言。

而对于另一些语言,所有数据对象与其存储的绑定只能发生在运行期间,此类语言称为动态语言,如Lisp、ML、Perl等。多数语言(如C/C++、Java、Pascal等)采取的存储分配策略是介于二者之间的。

参考资料来源:百度百科-全局变量

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语言的内存变量

 存储类别指的是数据在内存中存储的方法。存储方法分为静态存储和动态存储两大类。标准C语言为变量、常量和函数定义了4种存储类型:extern、auto、static、register。根据变量的存储类别,可以知道变量的作用域和存储期。这4种存储类型可分为两种生存期限:永久的(在整个程序执行期都存在)和临时的(暂时保存在堆栈和寄存器中)。extern和static用来标识永久生存期限的“变量和函数”,而anto和register用来标识临时生存期限的"变量"。只有变量才有临时生存期限。一个变量和函数只能具有一个存储类型,也只能有一种生存期限。

内存中供用户使用的空间有三部分:

程序区:存放程序的可执行代码;

静态存储区:存放静态变量(全局变量和静态局部变量);

动态存储区:存放函数调用时调用函数的现场保护和返回地址、函数形参、自动局部变量;

变量的声明分为”定义性声明“(需建立存储空间,如:int a;)和”引用性声明“(不需建立存储空间,如extern a;)。广义上讲,声明包括定义,一般为叙述方便,把建立存储空间的声明称定义,而不不需建立存储空间的声明称声明。

auto

函数中的局部变量,如果不用关键字static加以声明,编译系统对它们是动态地分配存储空间的。函数的形参和在函数中定义的变量(包括在复合语句中定义的变量)都属此类。在调用该函数时,系统给形参和函数中定义的变量分配存储空间,数据存储在动态存储区中。在函数调用结束时就自动释放这些空间。如果是在复合语句中定义的变量,则在变量定义时分配存储空间,在复合语句结束时自动释放空间。因此这类局部变量称为自动变量(auto variable)。自动变量用关键字auto作存储类别的声明。

对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行。对自动变量来说,若不赋初值,则它的值是一个不确定的值。

C语言中变量的存储类型有哪几种,存储方式哪几种?谢喽

C语言中变量的存储类型有哪几种,存储方式哪几种?谢喽

我想你说的应该是数据类型吧

没记错的话应该有以下几种:

静态变量:变量的生存期是从程序开始到结束;

动态变量:在程序运行当中需要调用该变量时才为它分配内存;

寄存器变量:存在于寄存器中:用于需要高速存取数据的场合

C语言 *** 有哪几种存储类型?

Turbo C2.0支持四种变量存储类型。说明符如下:

auto static extern register

下面分别来介绍。

一、auto

auto称为自动变量。

局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进

行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上

从来不用。

局部变量在函数调用时自动产生, 但不会自动初始化, 随函数调用的结束, 这

个变量也就自动消失了, 下次调用此函数时再自动产生, 还要再赋值, 退出时又自

动消失。

二、static

static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。

1. 静态局部变量

它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它

函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。

2. 静态全程变量

Turbo C2.0允许将大型程序分成若干独立模块文件分别编译, 然后将所有模块

的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态

全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与

全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用,

而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。

三、extern

extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要

被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用

extern来说明。

四、register

register称为寄存器变量。它只能用于整型和字符型变量。定义符register说

明的变量被Turbo C2.0存储在CPU的寄存器中, 而不是象普通的变量那样存储在内

存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量,

一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量

来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。

另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量,

因此, 不能用作全程变量。定义一个整型寄存器变量可写成:

register int a;

对于以上所介绍的变量类型和变量存储类型将会在以后的学习中, 通过例行程

序中的定义、使用来逐渐加深理解。

C++局部变量的存储方式有哪几种

静态存储方式与动态存储方式(具体:自动的、静态的、寄存器的register、外部的extern)

在内存中的用户的存储空间分为:程序区、静态存储区、动态存储区。

静态存储方式:在程序运行期间,系统对变量分配的固定空间。

动态存储方式:在程序运行期间,系统对变量分配的动态空间

1用static来声明静态局部变量,局部变量的值在函数结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上次函数调用结束时的值。静态局部变量的默认值为0.

2动态的局部变量当函数体被调用完毕时,变量的空间被释放。

c语言定义变量时,若无变量存储类型说明,则变量的存储类型是

c

变量存储类别分为哪几种

C语言中的变量有四种存储类型,这四种存储类型的关键字分别是

auto(自动)

extern(外部)

static(静态)

register(寄存器)

本地存储方式有哪几种

数据库,nsuserdefauts, file , plist,archieve 归档

比较小的就放在nsuserdefaults(以文件设计的存放在Libraray中)

数据库里面适合存放一条一条的记录

file 一般存普通文件,图片,视频,音频等

plist 存放比 nsuserdefaults 大一些的

归档 nsarchieve 可以存对象

当变量的存储类型定义缺省时,系统默认为变量的存储类型为? c语言

当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在静态区.

c语言基本变量有哪些存储类型?

老谭的书上有:

实型数据一般占4个字节(32位)内存空间。按指数形式存储。

实数3.14159在内存中的存放形式如下:

+ .314159 1

数符 小数部分 指数

其中:

小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。

指数部分占的位数愈多,则能表示的数值范围愈大。

基础加强哟。

在C++语言中,局部变量的隐含存储类型是() auto 无存储类型 答案为什么是无存类型

一个C变量有以下两种存储时期之一:静态存储时期(static storage duration)和自动存储时期(automatic storage duration)。

具有代码块作用域的变量一般情况下具有自动存储时期。在程序进入定义这些变量的代码块时,将为这些变量分配内存;当退出这个代码块时,分配的内存将被释放。该思想把自动变量使用的内存视为一个可以重复使用的工作区或者暂存内存。

局部变量都属于自动类型,即一旦程序栈弹出,局部变量消失。

什么是变量的存储类型

量有4种存储类型,分别是auto(自动型)、static(静态型)、register(寄存器型)和extern(外部型)。在定义或说明一个变量时可以加上存储类型关键字,以限定其存储类别。

存储类型决定了系统将在哪一个数据存储区为变量分配存储空间。

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中)。

由于变量让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字,因此它们十分有用。变量可以保存程序运行时用户输入的数据(如使用InputBox函数在屏幕上显示一个对话框,然后把用户键入的文本保存到变量中)、特定运算的结果以及要在窗体上显示的一段数据等。

如果在定义一个内部变量时,在定义语句最前面加上static存储类型限定词,那么该变量将是一个静态型变量。该变量将在静态数据区分配存储空间。这种变量作用域虽然只在函数内部,但是该变量将一直在静态数据区占据存储空间,直到程序运行结束。