本章围绕自定义复合数据类型展开,分为枚举、数组、指针、引用、结构体与共用体五大模块,是C++重难点。

 一、枚举类型 enum

3.1.2 使用 

1. 枚举变量只能取枚举列表内常量,限制取值范围,提升代码可读性

2. 枚举本质是整型,可和int互相隐式转换,但不推荐随意强转 

二、数组 

3.2.1 一维数组

- 定义: 类型 数组名[长度]; ,下标从 0 开始,不能越界访问

- 初始化: int a[5]={1,2}; 剩余元素自动补0;可省略长度 int a[]={1,2,3}; 由初始化值确定大小

3.2.2 二维数组 

- 定义: int arr[行][列]; ,行可省略、列不可省略

- 存储:行优先连续存放,多用于矩阵、表格数据

3.2.3 多维数组:三维及以上,日常开发极少使用

3.2.4 数组与函数 

数组做实参时退化为首元素地址,函数形参 int a[] 等价 int *a ,无法在函数内获取数组真实长度

3.2.5 字符数组与字符串

1. C风格字符串: char str[]="abc"; 末尾自动隐藏 '\0' 结束符

2. 常用库: <cstring> , strlen 求有效长度、 strcpy 复制、 strcat 拼接

3. C++推荐 string 类,无需手动处理结束符

三、指针(本章核心难点) 

3.3.1 指针定义&使用

- 指针存变量内存地址: int a=10; int *p=&a; , *p 解引用访问原变量

- 指针变量本身占固定字节(32位4字节/64位8字节)

3.3.2 指针与字符串 

 char *p="hello"; 指针指向字符串首地址,不可通过 p 修改字面常量内容 

3.3.3 指针与数组

数组名是首元素地址: a==&a[0] ; *(a+i) = a[i] ,指针加减整数实现数组下标遍历

3.3.4 多重指针

 int **pp; 二级指针存放一级指针的地址,多用于动态数组、字符串数组

3.3.5 动态内存分配

 new/delete : int *p=new int[5]; delete[] p; ,堆区手动申请释放内存,避免数组固定长度限制

3.3.6 指针与函数

- 指针作形参:修改实参原始数据(地址传递)

- 函数指针:存储函数地址,可做回调参数

3.3.7 常量指针&指针常量

1.  const int *p :常量指针,不能通过*p改值,指针本身可改指向

2.  int *const p :指针常量,指针指向固定不能改,可修改*p的值 

四、引用 &(C++独有)

3.4.1 引用定义

 int a=5; int &ra=a; ,引用是变量别名,定义时必须初始化,不能绑定空值

3.4.2 引用与函数

引用做形参,等价地址传递,语法比指针简洁,无内存开销,是函数传参首选

3.4.3 常引用 const &

 const int &r=a; :不能通过引用修改原变量,适配常量、临时变量传参

五,课后习题

1.输入一个字符串,检查出现的次数

2.工资,工号

3.连接两个字符串

4.判断回文字符

5.打印杨辉三角

更多推荐