二维数组的遍历
方法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 }