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

一 前言

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

写少点。

二 结论

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

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

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

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

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

三 正文

少写点,看着细品。

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

猜你喜欢

转载自blog.csdn.net/ALexander_Monster/article/details/108465946