开发者社区 问答 正文

为什么x [0]!= x [0] [0]!= x [0] [0] [0]?

我正在学习一些C ++,并且正在与指针作斗争。我知道我可以通过声明以下三个级别的指针:

int *(x)[5]; 因此,这x是指向5个元素的数组的指针,这些数组是的指针int。我也知道x[0] = *(x+0);,x[1] = *(x+1)等等。

那么,鉴于以上声明,为什么x[0] != x[0][0] != x[0][0][0]呢?

展开
收起
保持可爱mmm 2020-02-07 00:11:47 997 分享 版权
1 条回答
写回答
取消 提交回答
  • x是一个指向5个指针的数组的指针int。 x[0]是 5个指向的指针的数组int。 x[0][0]是指向的指针int。 x[0][0][0]是一个int。

                       x[0]
    

    Pointer to array +------+ x[0][0][0]
    x -----------------> | | Pointer to int +-------+ 0x500 | 0x100| x[0][0]----------------> 0x100 | 10 | x is a pointer to | | +-------+ an array of 5 +------+
    pointers to int | | Pointer to int
    0x504 | 0x222| x[0][1]----------------> 0x222
    | |
    +------+
    | | Pointer to int
    0x508 | 0x001| x[0][2]----------------> 0x001
    | |
    +------+
    | | Pointer to int
    0x50C | 0x123| x[0][3]----------------> 0x123
    | |
    +------+
    | | Pointer to int
    0x510 | 0x000| x[0][4]----------------> 0x000
    | |
    +------+
    你可以看到

    x[0]是一个数组,在表达式中使用时会转换为指向其第一个元素的指针(有一些例外)。因此x[0]将给出其第一个元素的地址x[0][0]为0x500。 x[0][0]包含的地址,该地址int为0x100。 x[0][0][0]包含的int值10。 因此,x[0]等于&x[0][0],因此,&x[0][0] != x[0][0]。 因此,x[0] != x[0][0] != x[0][0][0] 。

    问题来源于stack overflow

    2020-02-07 00:12:15
    赞同 展开评论
问答地址: