方法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 #include9 #include 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到multi236 }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 #include9 #include 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 }