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