一 前言
昨天做了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.