zhihezi
梵洛何
采纳率18.2%
2015-01-21 08:25

二维数组行指针的问题

已采纳

问一个比较呆的问题,今天看到了这样一个程序,运行结果是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条回答

  • xuheazx xuheazx 6年前

    #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!

    点赞 评论 复制链接分享
  • sddsighhz Creator_莫言 6年前

    (*pa)[4] = a;这句换一下应该是 pa = (*a)[4]//不知道这样写对不对。它的意思是指针pa指向a的第4列,而(pa + 1)相当于指向第4列的指针都向前移一位,那就是原来的指向4的指针向下移了一位,指向了5即:*(pa + 1)[0] = 5; 原来只想8的指针向下移一位,指向9 即: *(pa+1)[1] = 9;

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 6年前

    代码不全,不知道pa是什么类型。需要根据它的类型判断它+1得到的地址偏移是多少。

    点赞 评论 复制链接分享
  • 91program 91program 6年前

    数组指针 与 指针数组
    你需要看一下上面的博文,了解这两个基本概念。

    点赞 评论 复制链接分享
  • 91program 91program 6年前

    pa+1 是按 pa 的定义直接接 4 个数据,然后再 加 0/1,所以就是下标 4/5 对应的数值.

    点赞 评论 复制链接分享