存储类别、链接和内存管理—— ch12

本文详细介绍了C语言中的存储类别,包括基本概念、5种存储类别(自动变量、寄存器变量、静态外部链接变量、静态内部链接变量和静态无链接变量)以及它们与函数的关系。同时,讲解了动态内存分配和释放,以及ANSI C中的类型限定符如const、volatile和restrict的作用和使用场景。
摘要由CSDN通过智能技术生成

一、存储类别

1.1 基本概念

 对象:程序中被存储的值都占用一定的物理内存,C语言把这样的一块内存称为对象。对象可以                 存储一个值、很多值(数组)、或者未存储实际的值。

             程序访问对象的方法为声明变量,int entity = 1;该声明中创建了一个名为entity的标识符,               在这种情况下,标识符可以用来指定对象的内容,此外,还可以通过指针来指定对象                    (int * pt = &entity )。指定内存位置上的值的表达式被称为左值,如果使用左值(值)可以               改变对象(该值对应的内存)中的值,该左值就是一个可修改的左值。

            可以用存储期(对象在内存中保留了多长时间)来描述对象。可以用作用域和链接(程序             哪些部分可以使用它)描述标识符,通过标识符来访问对象。

作用域: 程序中可以访问到标识符的区域。作用域可以是块作用域、函数作用域、函数原型作用                   域或者文件作用域。

              块作用域:块是由一对花括号括起来的代码区域。例如整个函数体,复合语句等。定义                                    在块中的变量具有块作用域,可见范围是从定义处到包含该定义的块的末                                        尾函数形参也具有块作用域,属于函数体这个块。C99将块的概念扩展到                                   (while循环,for循环,do while循环)。

             函数作用域:仅用于goto语句。一个标签首次出现在函数内层块中,它的作用域也延申至                                    整个函数。因为goto语句不推荐使用,仅作了解。

             函数原型作用域:用于函数原型中的形参名,作用域范围是从形参定义处到原型声明结束。

             文件作用域:定义在函数外边的变量(也称全局变量),具有文件作用域,作用域范围从                                    它的定义处到该定义所在文件的末尾均可见。一个源文件及其头文件在编译                                    时都看成是一个包含信息的单独文件,这个文件被称为翻译单元,描述一个                                    具有文件作用域的变量时,它的实际可见范围是整个翻译单元。如果程序由                                    多个源代码文件组成,那么程序也将由多个翻译单元组成(其他翻译单元想                                    用必须要引用声明具有外部链接的静态变量,不然不可见)。

链接:C语言有三种链接属性:外部链接、内部链接和无链接。

          无链接:具有块作用域、函数作用域或函数原型作用域的变量都是无链接变量。仅供他们作                          用域内私有。

         内部链接:具有文件作用域的变量,仅能在一个翻译单元内使用。全局变量声明时加了static.

         外部链接:具有文件作用域的变量,可以在多文件程序中使用。默认全局变量存储方式。

作用域和链接描述了标识符的可见性。

存储期:存储期描述了通过这些标识符访问对象的生存期。C对象有4种存储期:静态存储期、线                  程存储期、自动存储期和动态分配存储期。

              静态存储期:文件作用域变量具有静态存储期,也就是说它在程序的执行期间一直存                                           在,链接属性不是存储期。块作用域的变量加上static就具有静态存储期,               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值