第20讲:动态内存分配
- 【静态内存分配】:编译时即确定并分配内存。
- 【动态内存分配】:程序运行期间按需分配内存。
new,delete
运算符举例:
int *p1, *p2;
char *pc1, *pc2;
p1 = new int;
p2 = new int(2);
pc1 = new char[50];
pc2 = new char[5][50];
delete p1;
delete [] pc1;
- 在被调函数中返回动态分配内存的指针是有意义的,因为它与被调函数的局部变量不同,是分配在内存堆区的。
- 多维数组的动态分配按一维数组的方式来。
第21讲:自定义结构类型
- 结构体类型标识符为类型名,而非实体,可用它来实例化。
- 结构体对象可进行整体赋值运算,但不能进行其他整体运算。
- 【结构体与数组、指针、函数】:用指针引用结构体对象的成员有两种方法
(*p).member
或p->member
。 typedef
的使用。
第22讲:自定义数据结构——链表
第23讲:预处理命令
- C++的源程序中允许用标识符代表一个字符文本,称为宏。预处理器将用相应的字符文本简单地替换宏。
- 【带参宏】:
#include<iostream>
#include<stdio.h>
using namespace std;
#define P1(x) printf(#x)
#define P2(x) printf(x)
int main(){
P1(hello world);
P1("hello world");
P2(hello world);
P2("hello world");
return 0;
}
##
运算符可将多个宏参数或字符文本连接起来,宏参数先字符串化再连接。
#define SET1(arg) A##arg=arg
#define SET2(arg) Aarg=arg
SET(1);
SET(2);
- 【文件包含命令】:
include <...>
或include "..."
,其中头文件名可为绝对路径或相对路径形式,相对路径相对的是编译器系统文件目录或用户工程目录。 - 【条件编译】:
4.1 #ifdef条件编译命令:测试条件字段是否已定义
#ifdef
...
#endif
#ifdef
...
#else
...
#endif
4.2 #if条件编译命令:根据常量表达式的值来选择编译
#if ...
......
#elseif ...
......
#else
......
#endif