二维数组的遍历

方法1:

 1 /*************************************************************************
 2     > File Name: ptrmulti.c
 3     > Author: Mr.Yang
 4     > Purpose:使用指针来将数组传递给函数 
 5     > Created Time: 2017年06月04日 星期日 08时51分15秒
 6  ************************************************************************/
 7 
 8 #include <stdio.h>
 9 #include <stdlib.h>
10 
11 /*遍历函数的原型,函数的参数是数组指针*/
12 void printarray_1(int (*ptr)[4]);
13 
14 int main(void)
15 {
16         /*声明一个三行四列的数组*/
17         int multi[3][4] = 
18         {
19                 {1,2,3,4},
20                 {5,6,7,8},
21                 {9,10,11,12}
22         };
23 
24         /*声明一个数组指针,可以指向4个int型的数组变量*/
25         int (*ptr)[4];
26 
27         /*把ptr初始化指向multi*/
28         ptr = multi;
29 
30         /*调用函数*/
31         /*记住这个地方刚开始编写代码的时候没有进行for循环操作,会打印不完整*/
32         int i = 0;
33         for(;i<3;i++)
34         {
35                 printarray_1(ptr++);//通过for循环可以遍历multi0到multi2
36         }
37 
38         return 0;
39 }
40 
41 void printarray_1(int (*ptr)[4])
42 {
43         int *p;
44         int count = 0;
45         p = (int *)ptr;//怎么理解类型的强制转换?
46 
47         for(;count < 4;count++)
48         {
49                 printf("%d\n",*p++);//通过类型强制转换后进行三行四列数组的横向打印
50         }
51 }

方法2:

 1 /*************************************************************************
 2     > File Name: ptrmulti1.c
 3     > Author: Mr.Yang
 4     > Purpose:二维数组的遍历方法2
 5     > Created Time: 2017年06月04日 星期日 09时40分36秒
 6  ************************************************************************/
 7 
 8 #include <stdio.h>
 9 #include <stdlib.h>
10 
11 /*遍历函数的原型*/
12 void printarray_2(int (*ptr)[4],int n);
13 
14 int main(void)
15 {
16         /*声明一个三行四列的数组*/
17         int multi[3][4] = 
18         {
19                 {1,2,3,4},
20                 {5,6,7,8},
21                 {9,10,11,12}
22         };
23 
24         /*声明一个数组指针*/
25         int (*ptr)[4];
26 
27         /*对数组指针进行初始化,此处ptr指向了multi[0],并且可以存储4个int型数组元素*/
28         ptr = multi;
29 
30         /*调用函数进行遍历操作,这个地方如果传参数后,就不用使用for循环,因为当获得第一个multi[0][0]后,进行顺序遍历即可得到所有值*/
31         printarray_2(ptr,3);
32 
33 
34         return 0;
35 }
36 
37 /*遍历函数*/
38 void printarray_2(int (*ptr)[4],int n)
39 {
40         int *p;
41         int count = 0;
42         p = (int *)ptr;
43         for(;count<4*n;count++)
44         {
45                 printf("%d\n",*p++);
46         }
47 }

 

posted @ 2017-06-04 09:59  杨来  阅读(2347)  评论(0编辑  收藏  举报