二维数组的输出--(指针输出 和 指针数组输出)

当我第一次看见数组指针和指针数组这两个名字的时候,我以为是一个东西呢,当看到英文解释就知道这两个是不一样的了。

指针数组:array of pointers,用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,指向数组的指针,数组可以是任意维的

下面举例说明:
  int a[3][4]   --->这个无需多说,就是一个二维数组。

  int (*p)[4]   --->就相当于int p[][4],它是一个二维数组的指针,可以指向一个第二维度为4的二维数组。

直接上代码:

  1、二维数组的指针输出:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 using namespace std;
 5 int main() {
 6     int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
 7     int *p, i, j; 
 8     p = &a[0][0];     //or p = a[0];  //or  p = *(a+0);//  or p = *a;
 9     for (int i = 0; i < 3; ++i) {
10         for (int j = 0; j < 4; ++j) {
11             printf ("%4d", *p++);
12         }
13         printf ("
");
14     }
15     return 0; 
16 }

  2、二维数组的指针数组输出:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 using namespace std;
 5 int main() {
 6     int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
 7     int (*p)[4] , i, j; 
 8     p = a;
 9     for (int i = 0; i < 3; ++i) {
10         for (int j = 0; j < 4; ++j) {
11             printf ("%4d", *(*(p + i) + j));
12         }
13         printf ("
");
14     }
15     return 0; 
16 }

  3、输入输出任意行的二维数组:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 using namespace std;
 5 void input (int *a, int m, int n) {
 6     printf ("请输入%d行,%d列的二维数组:
", m, n);
 7     for (int i = 0; i < m; ++i)
 8         for (int j = 0; j < n; ++j)
 9             scanf ("%d", a + i * n + j);   // or  scanf ("%d", &a[i*n+j]);
10 }
11 void print (int *a, int m, int n) {
12     for (int i = 0; i < m; ++i) {
13         for (int j = 0; j < n; ++j)
14             printf ("%4d", *(a + i * n + j));  //or  printf ("%4d", a[i * n + j]);
15         printf ("
");
16     }
17 }
18 int main() {
19     int a[2][4], b[3][3];//两个数组可以设置为最大值,认为输入大小
20     input (*a, 2, 4); //or input (a, 2, 4); // or input (a[0], 2, 4);  //or  input (a[0][0], 2, 4)  //////input (a, 2, 4) 不行的哦;
21     input (*b, 3, 3);
22     printf("数组a:
");
23     print (a[0], 2, 4);
24     printf ("数组b:
");
25     print (b[0], 3, 3);
26     return 0;
27 }
28 
29 /*
30 请输入2行,4列的二维数组:
31 1 2 3 4
32 5 6 7 8
33 请输入3行,3列的二维数组:
34 1 2 3
35 4 5 6
36 7 8 9
37 数组a:
38    1   2   3   4
39    5   6   7   8
40 数组b:
41    1   2   3
42    4   5   6
43    7   8   9
44 */

  差不多了,再遇到值得记录的了再加。

原文地址:https://www.cnblogs.com/Ddlm2wxm/p/5747230.html