zoukankan      html  css  js  c++  java
  • C Primer Plus学习笔记(十一)- 存储类别、链接和内存管理

    存储类别

    从硬件方面来看,被储存的每个值都占用一定的物理内存,C 语言把这样的一块内存称为对象(object)

    对象可以储存一个或多个值。一个对象可能并未储存实际的值,但是它在储存适当的值时一定具有相应的大小

    int entity = 3;
    

    该声明创建了一个名为 entity 的标识符(identifier)。标识符是一个名称,在这种情况下,标识符可以用来指定(designate)特定对象的内容

    标识符 entity 即是软件(即 C 程序)指定硬件内存中的对象的方式。该声明还提供了储存在对象中的值

    变量名不是指定对象的唯一途径

    int rank[10];
    

    rank 的声明创建了一个可容纳 10 个 int 类型元素的对象,该数组的每个元素也是一个对象

    const char * pc = "Hello World";
    

    程序根据该声明把相应的字符串字面量储存在内存中,内含这些字符值的字符串字面量就是一个对象。由于字符串字面量中的每个字符都能被单独访问,所以每个字符也是一个对象

    该声明还创建了一个标识符为 pc 的对象,储存着字符串的地址

    由于可以设置 pc 重新指向其他字符串,所以标识符 pc 是一个可修改的左值

    const 只能保证被 pc 指向的字符串内容不被修改,但是无法保证 pc 不指向别的字符串

    由于 *pc 指定了储存 'B' 字符的数据对象,所以 *pc 是一个左值,但不是一个可修改的左值

    字符串字面量本身指定了储存字符串的对象,所以它也是一个左值,但不是可修改的左值

    可以用存储期(storage duration)描述对象

    存储期是指对象在内存中保留了多长时间

    标识符用于访问对象,可以用作用域(scope)和链接(linkage)描述标识符,标识符的作用域和链接表明了程序的哪些部分可以使用它

    不同的存储类别具有不同的存储期、作用域和链接

    标识符可以在源代码的多文件中共享、可用于特定文件的任意函数中、可仅限于特定函数中使用,甚至只在函数中的某部分使用

    对象可存在于程序的执行期,也可以仅存在于它所在函数的执行期

    对于并发编程,对象可以在特定线程的执行期存在

    可以通过函数调用的方式显示分配和释放内存

    作用域

    作用域描述程序中可访问标识符的区域

    一个 C 变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域

    块是用一对花括号括起来的代码区域

    例如,整个函数体是一个块,函数中的任意复合语句也是一个块

    定义在块中的变量具有块作用域(block scope),块作用域变量的可见范围是从定义处到包含该定义的块的末尾

    虽然函数的形式参数声明在函数的左花括号之前,但是它们也具有块作用域,属于函数体这个块

    使用的局部变量(包括函数的形式参数)都具有块作用域

  • 相关阅读:
    gulp-css-spriter 将css代码中的切片图片合并成雪碧图
    通过JS模拟select表单,达到美化效果[demo]
    jQuery拖拽 & 弹出层
    sublime text 快速编码技巧 GIT图
    原生JS不到30行,实现类似javascript MVC的功能-minTemplate
    javascript拖拽原理与简单实现方法[demo]
    滚动焦点图实现原理和实践[原创视频]
    谈一谈值类型与引用类型和装箱与拆箱
    【原创】asp.net内部原理(三) 第三个版本 (最详细的版本)
    由JS函数返回值引发的一场”血案"
  • 原文地址:https://www.cnblogs.com/sch01ar/p/9343620.html
Copyright © 2011-2022 走看看