C语言课件 变量的存储属性
- 格式:ppt
- 大小:296.50 KB
- 文档页数:23
C语言中变量储存的类别C语言根据变量的生存周期来划分,可以划分为静态存储方式和动态存储方式。
静态存储方式:是指在程序的运行期间分配固定的存储空间的方式。
静态存储区中存储放了在整个程序执行过程中都存在的变量,如全局变量动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。
动态存储区中存放的变量是根据程序运行需要而进行的需要而建立和释放的。
通常包括:1.函数形式参数;2.自动变量;3.函数调用时的现场保护、4.和返回值地址等。
C语言中的存储类别又分为4类:自动(auto)、静态(static)、动态(extern)寄存器(register)1、用关键字auto定义的变量为自动变量,auto可以省略,auto 不写则隐含定为”自动存储类别“,属于动态存储方式。
2、用static修饰的为静态变量,如果定义在函数内部,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量,注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时,不赋初值的话,则对静态局部变量来说,编译时自动赋初值0.(对数值型变量)或空字符(对字符变量)。
3、为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫”寄存器变量“,用关键字register做声明注意:只有局部自动变量和形式参数可以作为寄存器变量;一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量局部静态变量不能定义为寄存器变量。
4、用extern声明的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量任务:运行结果是x=2;x=4;x=8;x=16;x=32;x=100。
c变量的存储类别
对c变量的存储类别总结一下:
在c语言中每个变量和函数有两个属性:数据类型和数据的存储类别。
存储类别是指数据在内存中的存储方式。
存储类别分为:静态存储类和动态存储类!具体包含4中:auto 、static、register、extern。
1.从作用域角度分:局部变量和全局变量。
采用的存储类别为:
局部变量:
(1) atuo(离开函数,值就消失)
(2) static(离开函数,值仍存在)
(3)register(离开函数,值就消失)
(4)(形参可以定义为atuo或register)
全局变量:
(1)static(只限本文件引用)
(2)extern(允许其他文件引用)
2.从变量存在的时间来分:静态存储和动态存储。
静态存储是程序整个运行时间都存在。
动态存储是在调用函数时临时分配单元静态存储:
(1)静态局部变量(函数内有效)
(2)静态外部变量(本文件内有效)
(3)外部变量(允许其他文件引用)
动态存储:
(1)atuo(本函数内有效)
(2)register(本函数内有效)
(3)形参(函数内有效)
3.从变量存放的位置来分:
内存中的静态存储区:
(1)静态局部变量
(2)静态外部变量(函数外部静态变量)
(3)外部变量(可为其他文件引用)
内存中的动态存储区:自动变量和形参CPU中寄存器:寄存器变量
注意:作用域与生存期的区别。
第2章变量和数据存储C语言的强大功能之一是可以灵活地定义数据的存储方式。
C语言从两个方面控制变量的性质:作用域(scope)和生存期(lifetime)。
作用域是指可以存取变量的代码范围,生存期是指可以存取变量的时间范围。
作用域有三种:1. extern(外部的) 这是在函数外部定义的变量的缺省存储方式。
extern变量的作用域是整个程序。
2.static(静态的) 在函数外部说明为static的变量的作用域为从定义点到该文件尾部;在函数内部说明为static的变量的作用域为从定义点到该局部程序块尾部。
3.auto(自动的) 这是在函数内部说明的变量的缺省存储方式。
auto 变量的作用域为从定义点到该局部程序块尾部。
变量的生存期也有三种,但它们不象作用域那样有预定义的关键字名称。
第一种是extern和static变量的生存期,它从main()函数被调用之前开始,到程序退出时为止。
第二种是函数参数和auto变量的生存期,它从函数调用时开始,到函数返回时为止。
第三种是动态分配的数据的生存期,它从程序调用malloc()或calloc()为数据分配存储空间时开始,到程序调用free()或程序退出时为止。
2.1 变量存储在内存(memory)中的什么地方?变量可以存储在内存中的不同地方,这依赖于它们的生存期。
在函数外部定义的变量(全局变量或静态外部变量)和在函数内部定义的static变量,其生存期就是程序运行的全过程,这些变量被存储在数据段(datasegment)中。
数据段是在内存中为这些变量留出的一段大小固定的空间,它分为两部分,一部分用来存放初始化变量,另一部分用来存放未初始化变量。
在函数内部定义的auto变量(没有用关键字static定义的变量)的生存期从程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止。
作为函数参数的变量只在调用该函数期间存在。
这些变量被存储在栈(stack)中。
第七章变量声明——存储类型变量:是一个命名的存储区域,在程序运行中其值可以发生改变变量的数据类型:具有数据类型,决定了该变量所分配的存储空间的大小,同时决定了在该变量上能够进行的操作变量的其它属性:存储方式、生命期、作用域通过变量声明的位置和存储类型决定。
存储类型包括auto、static、extern和register,声明中最多可以出现一种存储类型,且放置于声明中的首要位置。
变量的生命期变量分配存储空间使用变量变量生命期释放存储空间变量的生存期是一个时间的概念,由变量的存储类型决定。
变量的作用域在变量的生存期内,可以使用该变量的范围称为变量的作用域。
在变量作用域内引用变量,称变量在此作用域内“可见”变量的作用域是一个空间的概念,由变量定义语句的位置决定,根据变量定义语句位置的不同,变量分为局部变量和全局变量。
函数内定义的变量,其作用域为所在的函数,所有函数以外定义的变量,即全局变量,其作用域从定义位置开始,直到程序结束。
变量作用域作用域含义块作用域两个花括号包围的部分,如函数体,复合语句等语句块文件作用域从声明开始到文件结束全局作用域整个软件所有源文件变量的存储类型程序在系统中运行时,操作系统为其分配的存储空间可划分为四个区域,每个区域存放不同的数据。
函数调用是在公共数据区stack area中建栈完成的。
动态内存分配是在heap area中进行分配的。
局部变量动态分配内存全局变量静态变量程序代码变量的存储类型•自动变量/局部变量•静态变量•全局变量•寄存器变量自动变量在函数(模块)内部定义的变量称为自动变量,也称为局部变量。
其生命期和作用域均为局部的,即在函数(模块)内可见,作用域为函数内部(块作用域)。
局部变量存放在栈区中,函数被调用时,局部变量在栈区分配存储空间,函数调用结束时,局部变量随之消失,其值不能保存。
生命期是在函数调用期间。
局部变量在C中没有缺省初值,如果未被显式初始化,其值不确定。
c语言中变量存储方式在C语言中,变量是用来存储数据的一种方式。
C语言中的变量可以存储不同类型的数据,如整数、浮点数、字符等。
变量在内存中的存储方式决定了其在程序运行过程中的表现形式和特性。
本文将介绍C语言中常见的变量存储方式。
1. 自动变量(auto)自动变量是在函数中定义的局部变量,默认情况下存储在栈(stack)中。
栈是一种后进先出(LIFO)的数据结构,用于存储局部变量、函数参数和函数返回值等。
当函数调用结束时,栈中的局部变量会被自动释放。
自动变量的生命周期与函数的执行时间相同。
2. 静态变量(static)静态变量是在函数中定义的局部变量,在函数执行结束后不会被释放,而是存储在静态存储区。
静态存储区是在程序运行期间一直存在的一块内存空间,用于存储全局变量、静态变量和常量等。
静态变量的生命周期与程序的执行时间相同,但作用域仅限于定义它的函数内部。
3. 全局变量(global)全局变量是在函数外部定义的变量,存储在静态存储区。
全局变量的生命周期与程序的执行时间相同,作用域为整个程序。
全局变量可以在程序的任何地方被访问和修改,但应注意避免滥用全局变量,以防止命名冲突和程序的可维护性问题。
4. 寄存器变量(register)寄存器变量是通过register关键字声明的变量,用于将变量存储在CPU的寄存器中,以提高访问速度。
寄存器是CPU内部的一种高速存储器,用于存储临时数据和变量。
寄存器变量的使用受到编译器的限制,编译器可以选择是否将变量存储在寄存器中,也可以忽略register关键字的请求。
5. 动态内存变量(dynamic)动态内存变量是通过动态内存分配函数(如malloc、calloc等)在程序运行时手动分配的内存空间。
动态内存分配是一种灵活的内存管理方式,可以根据程序的需要动态地申请和释放内存。
动态内存变量的生命周期由程序员控制,需要手动释放以避免内存泄漏。
总结:C语言中的变量可以根据存储方式分为自动变量、静态变量、全局变量、寄存器变量和动态内存变量。