大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说数组指针的使用-打印二维数组「建议收藏」,希望您对编程的造诣更进一步.
「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」
正确写法:
把一维数组当成是一个二维数组!!!!
parr[0] == *(parr+0)->二维数组的第一行的数组名(该一维数组的数组名)
parr[0][j] == *(*(parr+0)+j) ->二维数组第一行下标为j的元素
void Print1(int(*parr)[10],int sz)
{
int i = 0;
for(i = 0;i<sz;i++)
{
printf("%d ",parr[0][i]);
//也可以写成
//printf("%d ", *(*(parr+0)+j);
//parr[0] == *(parr+0)
//parr[0][j] == *(*(parr+0)+j) == (*parr)[j]
}
}
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr)/sizeof(arr[0]);
Print1(&arr,sz);
return 0;
}
parr为指向数组的指针,解引用就相当于拿到了数组名
-> *parr == arr
->所以也可以写成:
写法1:printf("%d ",(*parr)[i]); //相当于arr[i]
写法2:printf("%d ",parr[0][i]);
//错误写法:*parr[i] ->parr先和[]结合
Print1(&arr,sz);
void Print1(int(*parr)[10],int sz)
int(*p1)[5]和int(*p2)[6],
p1和p2不一样!!!
p1:数组指针,类型为int(*)[5],指向的数组有5个元素,每个元素类型为int
p2:数组指针,类型为int(*)[6],指向的数组有6个元素,每个元素类型为int
数组指针指向的元素个数不可以省略!!!
5.打印二维数组两种方法
方式1:参数部分也是二维数组,
传参时:二维数组的行可以省略,列不可以省略
void Print1(int arr[][5], int r, int c)
//void Print1(int arr[3][5],int r ,int c)
{
int i= 0;
int j = 0;
for(i = 0;i<r;i++)
{
for(j = 0;j<c;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
Print1(arr,3,5);
return 0;
}
方式2:使用数组指针
void Print1(int(*p)[5],int r,int c)
{
int i= 0;
int j = 0;
for(i = 0;i<r;i++)
{
for(j = 0;j<c;j++)
{
printf("%d ",p[i][j]);
//printf("%d ",*(*(p+i)+j);
//p[i][j] == *(*(p+i)+j)
}
printf("\n");
}
}
int main()
{
int arr[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
Print1(arr,3,5); //arr是数组名,首元素地址,二维数组的数组名是第一行的地址
return 0;
}
把二维数组的每一行看成是一维数组,所以相当于传的是一维数组的地址,->int(*p)[5] !!!指向的是一维数组的数组指针
为什么方括号内元素个数是5 不是 3 : 二维数组每一行的元素个数是5
二维数组传参写成数组形式时,可以省略行,不可以省略列!
因为对一个二维数组,可以不知道有多少行,但必须知道一行有多少元素
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13853.html