传参的形式
void Func(int array[3][10]);
void Func(int array[][10]);
void Func(int a[3],int m);//以上三种较常见 注a[][]形式错,行数可省,列数不能省
void Func(int (a)[3],int m);
void Func(int **a,int m,int n);
void Func(int *a,int m,int n);
include <stdio.h>
void fun(int a[3][3]) // --> int (*)[3] 将二维数组依旧当作二维数组来处理
{
int i,j;
for(i = 0;i < 3;i++){
for(j = 0;j < 3;j++){
printf("%d ",a[i][j]);
printf("%d ",*((int )a + i3 + j));
}
printf("\n");
}
}
void fun0(int a[][3],int m) // --> int (*)[3] 将二维数组依旧当作二维数组来处理
{
int i,j;
for(i = 0;i < m;i++){
for(j = 0;j < 3;j++){
printf("%d ",a[i][j]);
printf("%d ",*((int *)a + i*3 + j));
}
printf("\n");
}
}
void fun1(int *a[3],int m) // --> int ** int *a[3] 是指向int型的指针数组(是数组),等同int **
{
int i,j;
for(i = 0;i < m;i++){
for(j = 0;j < 3;j++){
printf("%d ",*((int *)a + i*3 + j));
//printf("%d ",a[i][j]); 段错误
}
printf("\n");
}
}
void fun2(int (a)[3],int m) // --> int ()[3] 是指向含3个元素的一维数组的指针(是指针) 用“行指针”传递参数
{
int i,j;
for(i = 0;i < m;i++){
for(j = 0;j < 3;j++){
printf("%d ",*((int *)a + i*3 + j));
printf("%d ",a[i][j]);
}
printf("\n");
}
}
void fun3(int **a,int m,int n) // int **
{
int i,j;
for(i = 0;i < m;i++){
for(j = 0;j < n;j++){
printf("%d ",a[i][j]); //段错误
}
printf("\n");
}
}
void fun4(int **a,int m,int n) // int **
{
int i,j;
for(i = 0;i < m;i++){
for(j = 0;j < n;j++){
printf("%d ",*((int *)a + i*n + j));
}
printf("\n");
}
}
void fun5(int *a,int m,int n) //将二维数组当作一维数组来处理
{
int i,j;
for(i = 0;i < m;i++){
for(j = 0;j < n;j++){
printf("%d ",*(a + i*3 + j));
}
printf("\n");
}
}
int main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
fun(a);
fun0(a,3);
fun1((int **)a,3);
fun2(a,3);
//fun3((int **)a,3,3);
fun4((int **)a,3,3); //如果不强制转换 编译警告:需要类型‘int *’,但实参的类型为‘int ()[3]’
fun5((int *)a,3,3);
return 0;