二維數組的遍歷


方法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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM