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结束

原文地址:https://www.cnblogs.com/yangtianxing/p/2510991.html