前言
2维数组形参设置:
第一种形参为二维数组
void my_printf(int arr[2][3],int row,int col);
void my_printf(int arr[][3],int row,int col);
第二种形参为数组指针
void my_printf(int (*arr)[3],int row,int col);
函数调用均为:
my_printf(arr,row,col);
代码实现
/*2维数组传参*/
#include <stdio.h>
/*函数声明*/
//void my_printf(int arr[2][3],int row,int col);//正确写法1
//void my_printf(int arr[][3],int row,int col); //正确写法2
void my_printf(int (*arr)[3],int row,int col); //正确写法3
//(*arr)[3]是数组指针,也叫行指针
int main()
{
int row = 2,col = 3;
int arr[2][3] = {{1,2,3},{4,5,6}};
my_printf(arr,row,col); //arr是2维数组名,也是行指针
return 0;
}
/*函数定义*/
//void my_printf(int arr[2][3],int row,int col)
//void my_printf(int arr[][3],int row,int col)
void my_printf(int (*arr)[3],int row,int col)
{
int i,j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
程序运行结果
最后
也可以将M行N列的2维数组当成一个有着M*N个元素的1维数组。
实现如下:
#include <stdio.h>
/*函数声明*/
void my_printf(int a[],int sz);
int main()
{
int arr[2][3] = {{1,2,3},{4,5,6}};
int sz = 2*3;
//my_printf(&arr[0][0],sz); //写法1
my_printf(*arr,sz); //写法2,arr是行指针,通过*将行指针降级为列指针
return 0;
}
/*函数定义*/
void my_printf(int a[],int sz)
{
int i = 0;
for(i = 0;i<sz;i++)
{
printf("%d ",a[i]);
if((i+1)%3==0) //每打印3个元素就输出一个换行
{
printf("\n");
}
}
}
程序运行结果:同上