首页 > 编程知识 正文

c二维数组定义(函数定义二维数组)

时间:2023-05-03 16:57:56 阅读:99431 作者:1825

我们知道,数据以一维线性顺序存储在内存中。如何表示二维数组?在编程语言中,如果二维数组是按照行主顺序存储的,那么行I和列J的行列式就代表了每个元素。如果有arr[i][j](数组名arr是一个内存区域的第一个地址,它的元素偏移量可以用I和J的表达式来表示),那么每个元素都可以用一个指针来表示:arr I * icols J(I I和J的初始值为0)。当然,它可以被视为降维数组,它的元素是数组指针:arr[i]。

有五种方法可以调用函数参数中的二维数组:

#包含stdio.h

int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12 };

//1发送二维数组,必须标注第二维。

//函数调用:arr2D_1(arr,3);

void arr2D_1(int arr[][4],const int irows)

{

for(int I=0;iirows(一)

{

for(int j=0;j4;j)

{

printf(']',arr[I][j]);

}

}

printf(' n ');

}

//2传递数组指针,必须标记第二维。

//函数调用:arr2D_2(arr,3);

void arr2D_2(int (*parr)[4],const int irows)

{

for(int I=0;iirows(一)

{

for(int j=0;j4;j)

{

printf(']',parr[I][j]);

}

}

printf(' n ');

}

//3降维处理,将指针传递给降维后的数组元素。

//函数调用:arr2D_3(arr[0],3,4);或者arr2D_3((int*)arr,3,4);

void arr2D_3(int *arr,const int irows,const int icols)

{

for(int I=0;iirows(一)

{

for(int j=0;jicolsj)

{

printf(']',*(arr I * icols j));

}

}

printf(' n ');

}

//4使用二维指针传递值。

//函数调用:arr2D_4((int**)arr,3,4);否则,int[3][4]与int **的类型不匹配。

void arr2D_4(int **arr,int rows,int cols)

{

for(int I=0;irows(一)

{

for(int j=0;jcolsj)

{

printf(']',*((int *)arr cols * I j));

}

}

printf(' n ');

}

//5使用指针数组

//函数调用,实际的参数也使用指针数组,但是指针数组的元素需要在一个循环中提前赋值。

void arr2D_5(int* arr[],int rows,int cols)

{

for(int I=0;irows(一)

for(int j=0;jcolsj)

printf(']',arr[I][j]);

}

int main()

{

int* q,(* p)[4];

for(p=arr;parr 3;p=1)

for(q=p[0];qp[0]4;q=1)

printf(']',* q);

printf(' n ');

p=arr

for(int I=0;i3;(一)

for(int j=0;j4;j)

printf(']',p[I][j]);

printf(' n ');

arr2D_1(arr,3);

arr2D_2(arr,3);

arr2D_3(arr[0],3,4);

arr2D_3((int*)arr,3,4);

arr2D_4((int**)arr,3,4);

int * parr[3];

for(int k=0;k3;k)

parr[k]=arr[k];

arr2D_5(parr,3,4);

getchar();

返回0;

}

/*output:

1 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12

*/-结束-

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。