zoukankan      html  css  js  c++  java
  • 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结束

  • 相关阅读:
    【BZOJ】4636: 蒟蒻的数列
    BZOJ1878 [SDOI2009]HH的项链
    【网络流24题----02】太空飞行计划
    【网络流24题----03】Air Raid最小路径覆盖
    【网络流24题----01】飞行员配对方案问题
    素数判定(米勒测试定理-费马小定理+快速乘)
    一堆模板(丑陋0.0)------数据结构
    丑数(USACO)
    NOI[2001]食物链
    关于Tarjan(2)
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2510991.html
Copyright © 2011-2022 走看看