二维数组的传参问题

传参的形式

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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。