梵洛何 2015-01-21 08:25 采纳率: 18.2%
浏览 1723
已采纳

二维数组行指针的问题

问一个比较呆的问题,今天看到了这样一个程序,运行结果是9,我就糊涂了
(pa+1)[1]是什么啊
为什么
(pa+1)[0]是5呢
那个方括号里的数字指什么呢
我真是彻底晕了
求指教~
#include
void main()
{
static int a[3][4]={1,2,3,4,5,6,7,8,9,10},(*pa)[4]=a;
cout<<*(pa+1)[1]<<endl;
}


  • 写回答

5条回答 默认 最新

  • henry.x 2015-01-21 10:33
    关注

    #include
    int main()
    {
    int a[3][4] = {
    1,2,3,4,
    5,6,7,8,
    9,10
    };
    int (*b)[4] = a ;
    printf("%d %d\n",*(b+1)[1],*(b)[1]);
    //测试结果: 9 5
    printf("%d %d\n",(*(b+1))[1],(*(b))[1]);
    //测试结果: 6 2
    return 0;
    }

    
    

    看见了吧,相信 你能看明白了。

    首先运算符的先后顺序 *b[1] = * (b[1])

    而之前 (*b)[4] = a
    说明 把 a的首地址 也就是 &(a[0][0]) 赋值给了 (*b)[4] 这个数组 。

    (*b)[4] 这个数组 是个 指针数组。 赋值结束后

    *b 代表了第一行第一列的值,你可以打出来看看( printf("%d\n",*b[0] ), 而b 就代表了第一行第一列 的 首地址 ,所以 b = a.

    所以 b[1] = a[1]
    so
    *(b+1)[1] = * ( (b+1)[1]) = * (b+1 + 1) = * a[2] = a[2][0] ;
    over!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多