打印⼆维数组的三种⽅法
⽅法⼀:常规法
⽼⽼实实传⼆维数组。
void print1(int arr[3][5], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
print1(arr, 3, 5);
return 0;
}
指针与二维数组这段代码块,arr[3][5]⾥的3可省略,降维后与前⼀维度⽆关.但5不能省略,因为降维后的指针类型与元素个数有关,省略后指针会类型不明确.
⽅法⼆:传指针法
数组传参都会发⽣降维,降维成指向其内部元素的指针,因为⼆维数组被看成⼀个数组元素为⼀维数组的⼀维数组。所以在这⾥,⼆维数组arr降维成⼀个指向⼀维数组的指针,即(*arr)[5],这⾥与3也就没有任何关系了。
void print2(int (*arr)[5], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
print2(arr, 3, 5);
return 0;
}
⽅法三:⼀维数组打印法
在我所总结的关于规律⾥,认为所有的不管⼏维数组,都可以被看为⼀维数组。所以⼆维数组就是⼀维数组,只不过⾥⾯的元素为⼀维数组。所以我想要通过⼀维数组来打印⼆维数组。这⾥假设打印⼀个3⾏3列的数组。arr[3][3].
我们通过画图来灵感:⼆维数组的下标我们很容易得到,现在问题是怎么得到这个⼀维数组的下标?我们先把我们需要的新下标列出来,然后再来寻i,j和新下标之间的关系,通过观察我们能得到:新下标=i*row+j
那么代码如下:
void print3(int *arr, int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ", arr[i*col+j]);
}
printf("\n");
}
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9};
print3(arr, 3, 3);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论