二维数组,看的清一些就好

一 前言

昨天做了CVTE的嵌入式笔试卷子,发现,二维数组的题目好多。头皮微酥。今天总结下这个二维数组到底是个啥。

写少点。

二 结论

二维数组,从本质上去看,就是:

  • 一个二维数组,它的每一个数组元素都是一个一维数组,
  • 一维数组的一维数组

实际上,去理解:二级指针

二维数组,实际上就是二级指针的应用啊。

用二级指针的思想去考虑二维数组的访问,基本没错了,一切都讲的通了。

三 正文

3.1 二维数组定义

int a[3][6];

在这里插入图片描述
实线方框表示第一维的3个元素,虚线用于划分第二维的6个元素。下标值为:
在这里插入图片描述

多维数组的元素存储顺序按照最右边的下标率(shuai)先变化的原则,称为行主序(row major order)

3.2 代码

int a[3][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} };
int a[0]; // 这是一个地址,是a[0][0]的地址,编译器看就是*(a + 0),
// 从二级指针的角度考虑,*a里装着一个数组元素指针,**a里面装的才是数组的元素a[0][0]

&a; // 得到的是一个地址,数组名也就是a[0][0]的地址
&a[1]; // 得到的是一个地址,a[1][0]的地址
a[0][0]; // 得到一个数,a[0][0]中的装的数
		
#include <iostream>

using namespace std;

int main()
{
	int a[][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} };

	cout << a[0] << endl; // 地址
	cout << "&a[0][0]: " << &a[0][0] << endl;
	cout << "&a[0][1]: " << &a[0][1] << endl;
	cout << "&a[0][2]: " << &a[0][2] << endl;
	cout << "&a[0][3]: " << &a[0][3] << endl;
	cout << a[1] << endl;
	cout << a[2] << endl;
	cout << endl;
	
	cout << *(a + 1) << endl; // a[1]
	cout << *(a + 1) + 1 << endl; // a[1] + 4,*(a+1) + 1, 加的不是1,而是sizeof(int) * 1,即a[1][1]的地址
	cout << *( *(a+1) + 1 ) << endl; // a[1][1], 结合着*间址访问符看
	cout << *( *a + 1 ) << endl; // a[0][1]
	cout << endl;

	return 0;
}

输出结果为:
在这里插入图片描述

参考资料

[1] acodewarrior. 二维数组的两种访问方式. 博客园. 2015.
https://www.cnblogs.com/wgang171412/p/4975596.html
[2] 《C和指针》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值