疫情所迫,希望用这种方法督促自己坚持学习。同时记录在找工作过程中的艰辛不易。博客内容持续增减修改,都为摘录和个人理解。欢迎各位批评指正其中错误,相互勉励,共同进步。
一、多维数组的初始化
对于一个3行4列的数组可以理解为由3个大小为4的数组所构成,多维数组既数组的数组。多维数组的定义如下:
int a[3][4]; //定义大小为3 x 4的整型数组
int a[3][4] = {0}; //定义大小为3 x 4的整型数组,并所有赋初值0
int a[3][4] = {{0},{1},{2}}; //定义大小为3 x 4的整型数组,每一行第一个元素分别为0,1,2
int a[3][4] = {0,1,2}; //定义大小为3 x 4的整型数组,第一行前三个元素为0,1,2
多维数组的下标引用
注意改代码中的一个引用的用法,可以将二维数组的其中某一个元素提取出来
int arr[3][4][5];
int a[5][5];
a[2][3] = arr[0][0][0]; //对多维数组的元素单独赋值
int (&b)[5] = a[1]; //把b绑定到a的第二个5元数组上
示例代码一:
const int row = 3;
const int col = 4;
int arr[row][col];
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
arr[i][j] = col*i + j;
int(&temp)[col] = arr[1]; //temp为arr第二个大小为4的数组
cout << temp[0] << endl; //输出结果为4
示例代码二:
下面代码中,我们利用范围for语句实现对二维数组赋值。值得注意的是,如果需要对数组元素读写,那么所有层循环都要加引用。如果只读,则除了最内层循环不用加引用,其余层全部加引用,不然会报错。(具体原因不展开分析)
const int row = 3;
const int col = 4;
int arr[row][col];
int a = 0;
for (auto &i : arr) //利用范围for语句实现赋值
for (auto &j : i) //注意此处i和j都是引用
j = a++;
cout << arr[1][0] << endl; //输出结果为4
二、多维数组和指针
在数组章节中我们已经分析并必须掌握三种指针与数组结合的含义。在本章节中我们会结合多维数组,再做一次复习总结。
示例代码一:
注意对比分析二维数组和一维数组的区别,这里对下面的用例不做过多的解释,希望能够自己分析清楚。
//二维数组
const int row = 3;
const int col = 4;
int arr[row][col];
int a = 0;
for (auto &i : arr)
for (auto &j : i)
j = a++;
int (*ip1)[4] = arr; //指向arr第一行数组的指针
int (*ip2)[4] = &arr[0]; //指向arr第一行数组的指针
cout << *(ip1 + 1)[0] << endl; //输出结果为4
cout << *(ip2 + 1)[0] << endl; //输出结果为4
//一维数组
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
int(*p1)[10] = &a;
int(&p2)[10] = a;
int *p3 = a;
cout << (*p1)[1] << endl; //输出结果为1
cout << (*(p1 + 1))[0] << endl; //输出结果为-858993460
cout << (*p1 + 1)[0] << endl; //输出结果为1
cout << p2[1] << endl; //输出结果为1
cout << *(p3+1) << endl; //输出结果为1