数组指针的使用-打印二维数组

举报
芒果_Mango 发表于 2022/02/26 21:45:43 2022/02/26
【摘要】 「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」正确写法:把一维数组当成是一个二维数组!!!!parr[0] == *(parr+0)->二维数组的第一行的数组名(该一维数组的数组名)parr[0][j] == *(*(parr+0)+j) ->二维数组第一行下标为j的元素 void Print1(int(*parr)[10],int sz){ int ...

「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

正确写法:

把一维数组当成是一个二维数组!!!!
parr[0] == *(parr+0)->二维数组的第一行的数组名(该一维数组的数组名)
parr[0][j] == *(*(parr+0)+j) ->二维数组第一行下标为j的元素 

image-20220214210000867


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

->所以也可以写成:

写法1printf("%d ",(*parr)[i]);	//相当于arr[i]
写法2printf("%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;
}

image-20220214210010610


把二维数组的每一行看成是一维数组,所以相当于传的是一维数组的地址,->int(*p)[5] !!!指向的是一维数组的数组指针

为什么方括号内元素个数是5 不是 3 : 二维数组每一行的元素个数是5


二维数组传参写成数组形式时,可以省略行,不可以省略列!

因为对一个二维数组,可以不知道有多少行,但必须知道一行有多少元素

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。