• Professional C++读书笔记01


    2012-05-14

    Chapter01

    1、构建一个C++程序过程:预处理→编译→链接

             预处理:交由预处理器处理的指令以#开头

    预编译器指令

    功能

    常见用途

    #include [file]

    将指定的文件代码插入到指令所在位置

    包含头文件

    #define key value

    指定key的每次出现都替换为value

    在C中定义常量或宏

    C++中有更好的方法

    #ifdef [key]

    #ifndef [key]

    #endif

    有条件的包含或者忽略ifdef ifndef块中的代码

    避免循环包含,即避免代码被多次包含

    #pragma

    不同的编译器不一样

    尽量不用

             编译:翻译为机器可读的对象文件

             链接:单个或多个对象文件link到一起构成一个应用

    2、计算表达式顺序:C++会优先计算/,*,%(从左至右计算),再完成+-,然后是位操作

    3、栈帧

    是编译器用来实现函数调用的一种数据结构

    栈帧为每个函数提供一个独立的内存工作区,若变量是在func1()栈帧中声明的,那么调用func2()函数不会对它带来改变,除非专门修改

    当func1()调用func2()时,func2()就有了自己的栈帧(stack frame)以供使用

    从func1()传到func2()的参数会从func1()栈帧复制到func2()栈帧中

    4、int i=10;

             int *p1=&i;       // p1指向栈内存

             int *p2=new int ;      // p2指向堆内存

             *p2=10;   //没有改变指针,只改变了指针的指向。若此句改成p2=10,则指针指向内存地址为10,危险行为

    5、char c1[20]=”hello world”;

             char *c2=”hello world”;

             对于c1,编译器会在中分配20字符空间,以\0结束,后面是一些随机值,数组长度为20,但处理时会忽略掉\0后面的所有内容

             对于c2,编译器在栈中分配内存来保存指针c2

             c2指向编译器预留的内存区,用以保存常量串”hello world”,也以\0结束

  • 相关阅读:
    HDU 1017—A Mathematical Curiosity
    N !
    L
    J
    Danganronpa
    A water problem
    hdu 5461 Largest Point
    India and China Origins hdu 5652 (BFS+二分)
    D (多校训练三) poj1919 (二分)
    Discovering Gold lightoj 1030 (dp+期望)
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2510991.html
Copyright © 2020-2023  润新知