西工大《C++程序设计》——(四)

文章目录

    • 第20讲:动态内存分配
    • 第21讲:自定义结构类型
    • 第22讲:自定义数据结构——链表
    • 第23讲:预处理命令

第20讲:动态内存分配

  1. 【静态内存分配】:编译时即确定并分配内存。
  2. 【动态内存分配】:程序运行期间按需分配内存。
  3. 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;	// 释放一维数组的内存空间
  1. 在被调函数中返回动态分配内存的指针是有意义的,因为它与被调函数的局部变量不同,是分配在内存堆区的。
  2. 多维数组的动态分配按一维数组的方式来。

第21讲:自定义结构类型

  1. 结构体类型标识符为类型名,而非实体,可用它来实例化。
  2. 结构体对象可进行整体赋值运算,但不能进行其他整体运算。
  3. 【结构体与数组、指针、函数】:用指针引用结构体对象的成员有两种方法(*p).memberp->member
  4. typedef的使用。

第22讲:自定义数据结构——链表

第23讲:预处理命令

  1. C++的源程序中允许用标识符代表一个字符文本,称为宏。预处理器将用相应的字符文本简单地替换宏。
  2. 【带参宏】:
  • #运算符可将宏参数“字符串化”:
#include
#include
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);	// 替换为A1=1
SET(2);	// 替换为Aarg=2
  1. 【文件包含命令】:include <...>include "...",其中头文件名可为绝对路径或相对路径形式,相对路径相对的是编译器系统文件目录或用户工程目录。
  2. 【条件编译】:
4.1 #ifdef条件编译命令:测试条件字段是否已定义
#ifdef
	...
#endif
//**********//
#ifdef
	...
#else
	...
#endif
4.2 #if条件编译命令:根据常量表达式的值来选择编译
#if 	...
	......	// 1段
#elseif ...
	......	// 2段
#else
	......	// 3段
#endif

你可能感兴趣的:(C++语言)