C++ 多维数组相关知识小结

疫情所迫,希望用这种方法督促自己坚持学习。同时记录在找工作过程中的艰辛不易。博客内容持续增减修改,都为摘录和个人理解。欢迎各位批评指正其中错误,相互勉励,共同进步。

一、多维数组的初始化

对于一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值