asdasdasdsc
asdasdasdsc
采纳率89.5%
2021-02-24 22:41

求解int(*p)[4]=(int(*)[4])m;这部分的意思是什么,为什么运行结果是个7

5
已采纳

#include <stdio.h>
int main()
{
    int m []={1,2,3,4,5,6,7,8,9,0};
    int(*p)[4]=(int(*)[4])m;
    printf(“%d”,p[1][2]);
    return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • qq_43414873 小白小白你好菜 2月前

    p是行指针,(int(*)[4])是格式类型转换,目的是为了把一维数组m强行转化成二维数组。因为这个二维数组的第二维大小为4,但是你的m中的元素个数为10,那么你的一维大小为10/4+1=3,即int (*p)[4] 相当于int p[3][4]={{1,2,3,4},{5,6,7,8},{9,0}}

    所以p[1][2]=7

    点赞 1 评论 复制链接分享
  • m0_49364644 pqNZ 2月前

    int main()
    {
        int m []={1,2,3,4,5,6,7,8,9,0};     //整型的一维数组
        int(*p)[4]=(int(*)[4])m;                //int(*p)[4],这是一个数组指针(也称行指针)。()优先级高,首先说明p是一个指针,指向一个整型的一维数组,

                                                          //这个一维数组的长度是4,也可以说是p的步长。也就是说执行p+1时,p要跨过4个整型数据的长度。

                                                         //(int(*)[4])m 这里是将一维数组强制转化为数组指针
        printf(“%d”,p[1][2]);                  //如上面所说p+1时,p要跨过4个整型数据的长度,也就是所p[1][0]指向了“5”这里。所以p[1][2]指向的是7。

                                                       //从这里也可以看出数组指针为什么也叫行指针,p++,指向的是下一行。
        return 0;
    }

    debug时,我们可以清楚的看到这个过程,如下图:

    点赞 1 评论 复制链接分享
  • qq_40344524 书山客 2月前

    int m []={1,2,3,4,5,6,7,8,9,0};

    int(*p)[4]=(int(*)[4])m;

    p是一个指针,[4]表示在p中存放的数据按照4个一组拆开存放,所以通过m给p赋值后p指向的地址中存放的数据格式为:{(1,2,3,4),(5,6,7,8),(9,0)},相当于一个二维数组:

    1 2 3 4

    5 6 7 8

    9 0      

    所以输出p[1][2]就是第二行第三列的值 7

    点赞 1 评论 复制链接分享

为你推荐