1 #include<iostream>
2 using namespace std;
3
4 //二维数组作为函数的参数
5 // 注意此时的长度,是有多少行,也就是最外层有多少个
6 void erweishuzu(int(*p)[4], int len)
7 {
8 for (int i = 0; i < len; i++)
9 for (int ii = 0; ii < 4; ii++)
10 cout << p[i][ii] << endl;
11 }
12
13
14 int main()
15 {
16 //二维数组
17
18 int arr2[3][4] = { 0,1,2,3,4,5,6,7,8,9,11,12 };
19
20 //二维数组的指针
21 //
22 // 自己的理解,二维数组其实就是 一维数组 的 数组,每个元素都是一个一维数组
23 // 二维数组的指针,每跳一次,都是要跳过一个一维数组,它得知道你一个一维数组里面有多少个元素
24 // 所以在声明的时候,要告诉他最里层一维数组有多少个元素,就用指针名后面跟[列数]:int (*p1)[4]
25 //[ ]的优先级高于*,( )是必须要加的,如果赤裸裸地写作int *p[4],
26 // 那么应该理解为int *(p[4]),p 就成了一个指针数组,而不是二维数组指针
27 int (*p1)[4] = nullptr;
28 p1 = arr2;
29 cout << (void*)p1 << endl;
30 p1++;
31 cout << (void*)&arr2[1] << endl;
32 cout << (void*)p1 << endl; cout << *(*p1+1) << endl;
33 //int (*)[3]的值不能用于初始化 int* 类型的实体
34 cout << endl;
35 erweishuzu(arr2, 3);
36
37 cout << endl;
38 //三维数组
39 int arr3[3][2][3] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
40
41 //三维数组指针也是一样了
42
43 int(*p2)[2][3] = arr3;
44
45 cout << (void*)p2 << endl;
46 p2++;
47 cout << (void*)p2 << endl; cout << **(*p2 + 1) << endl;
48
49
50
51
52 }