2020-C++高级程序设计-C++ 数组
1. 数组
- 数组作为参数
int a[]
- 特征:
- 相同类型
- 连续存储:0 - n-1
- 数组名的含义:
int A[6]
的A是代表6个int的集合sizeof(A)
:6 * sizeof(int)
1.1. 一维数组
- 类型定义
T name[number]
- 赋值操作,部分赋值的话,之后按照默认值
- 函数接口:
void f(int a[], int n);//这里面的a的身份已经发生了变化
- 此时a已经不知道有多少个元素了
- C++是允许数组的越界(给予语言表达极大的灵活性),不检查数组的越界
- 元素个数需通过参数显式给出,不可以通过sizeof来获得:
void f(char a[]);
1 |
|
- 读取字符数组的时候,我们可以根据
\0
来判断是否字符串结束 - 为什么会出现"烫烫烫":
0xCC
是烫(在VS下由于未初始化,VS为了帮助你发现问题,对于未使用的内存空间我们都使用0xCC填充,0xCC是指3号中断)
- 0xCC:烫
- 0xCD:屯:heap(在栈部分出现的额问题)
- 数组未初始化:在对应位置填充0xCC,其上下文填充0xFD
- 释放内存,如果没有请0,则会帮你将内存中的值清理成一个特定的值,用来防止内存为清零。
1.2. 一位数组的初始化
- 整数数组的初始化
1 |
|
- 字符串的初始化-栈初始化
1 |
|
- 数组的默认初始化:如果不明确指出初始化列表,那么基本类型不会被初始化(全局变量和静态变量除外),所有内存都是脏数据;且自定义的类类型会为每个元素调用默认构造函数进行初始化
1 |
|
1.3. 二维数组
T name[number1][number2]
- 也是按照顺序进行排列的,不过是一行一行的放置而已
- 二维数组初始化
1 |
|
1.4. 多维数组
- 定义:
T A[c1][c2]
- 存储组织:
- 参数传递:
void f(int a[][3], int n);
- 理解为int[3] a[] (单个元素是三个int)
- 缺省第1维
1 |
|
- 升/降维处理
1.5. 字符数组
- 直接按照字符串形式输出
- 字符数组的约定是,以
\0
作为结尾
2020-C++高级程序设计-C++ 数组
https://spricoder.github.io/2020/07/01/2020-C-plus-plus-advanced-programming/C++-%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/2020-C-plus-plus-advanced-programming-C++%20%E6%95%B0%E7%BB%84/