1. 二维数组
如果我们把
⼀维数组做为数组的元 素,这时候就是⼆维数组,
⼆维数组作为数组元素的数组被为三维数组,⼆维数组以上的数组统称 为多维数组。
1.1 二维数组的创建
先行后列
其实也可以这样理解:把二维数组当成特殊的一维数组,即比如
arr1[ 0 ] 为一个“数组名”,后面的那个括号就是一维数组的下标名
1.2 二维数组的初始化
1.2.1 不完全初始化
默认情况是一行一行初始化的,没有被初始化的就默认都是 0 ,如果是字符型的话,也会对应到对应的ASCII码,也就是 \0
如果是整型,就只是 0
1.2.2 完全初始化
会自动根据行列来按顺序安排位置
1.2.3 按照行初始化
一维数组用{ }来初始化,二维数组就是把一维数组当成元素,所以每个小花括号就相当于一个一维数组
1.2.4 初始化时省略行
初始化时只能省略行而不能省略列
省略行时,可以通过初始化的值和列数来判断行数,但是如果省略列数,行列就都是未知数了
1.3 二维数组的使用
1.3.1 二维数组的下标
arr1[ 行 ] [ 列 ] ,行列都是从 0 开始的,有这两个下标就能找打到对应的数组元素
1.3.2 二维数组的打印
通过这样的方式来实现循环打印,不熟悉的话可以调试然后看看运行过程
要熟悉这种循环嵌套的执行流程
1.3.3 二维数组的输入
也要用循环,这里要注意局部变量和全局变量的知识,
1.4 二维数组在内存中的存储
都是相差 4 个字节,也就是一个整型的长度,所以其实他们是线性存放的
这也就更好的印证了前面说的把二维数组当一维数组来理解, 比如 arr[ 1 ]就当做一个数组的数组名
2. C99 中的变长数组
但是vs2022默认的msvc编译器是不支持这种语法的,要在gcc编译器上才能实现
但是要注意不能初始化变长数组
具体就是这么用的
至于能用在什么有意义的程序里,还不太懂
2.1 怎么在vs2022上使用变长数组?
需要把编译器从msvc切换成clang
操作步骤:
就可以了
3. 数组的渐进打印
其原理就是一个数组替换掉另一个数组
具体看这个吧,原理都在里面了
4. 查找数组元素
4.1 普通的查找
就这么个找法,不过我这里 nt 了一下
4.2 二分查找
天塌了,为什么代码错了,找了十几分钟都没找出毛病我擦
!!!问题出在 mid 没有放在循环里!导致mid不能更新,所以直接就找不到了
改过来之后其实还是有一点缺陷,就是这里如果left和right的值很大的话,就会远超int或者long long int,最后求出来的平均值就会对不上,解决办法就是改成
int mid = left + (right - left) / 2;