开发者社区> 问答> 正文

为什么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 637 0
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
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载