【问题标题】:Is p = array the same as p = &array[0]?p = array 是否与 p = &array[0] 相同?
【发布时间】:2011-12-03 15:37:15
【问题描述】:
int numbers[20];
int * p;    

下面的两个作业是一样的吗?

p = numbers;
p = &numbers[0];

【问题讨论】:

  • 虽然不是重复的,但是注意相关语法很有意思:Difference between &(*similarObject) and similarObject? Are they not same?
  • @Nawaz:将完全不同的 Q 与此链接的目的是什么?它们有什么关系?如果需要将任何内容链接到对 OP 有用,则必须是 FAQ 条目:How do I use arrays in C++。请不要链接不相关的 Q 或答案,因为它们已由您回答,而是链接相关的正确答案。
  • @Als:我觉得这很有趣,并且在语法上有些相关,因此我将其作为评论发布,而不是重复发布。一个有趣的话题的链接比你发布的许多 cmets 好得多,而且因为它只是一个评论,所以加油。无需监管每一件小事。
  • @Nawaz: somehow related 怎么样?我看不出有什么关系。如果每个用户都开始链接不相关的(当然可能是有趣的)链接,那么没有任何附加值,只是会产生很多噪音。并且不要进行人身攻击,如果这样做,请引用您的 far better than many of your comments which you post 报价。当像您这样有经验的用户撞到他们的自己的答案要求每一个警务工作。
  • @Als:还要注意,找到某种相关的东西是主观的;这一切都取决于一个人如何思考、形象化概念和符号并将它们联系起来。如果你不觉得它相关,那么我很好。我不会强迫任何人点击链接并阅读主题。

标签: c++ arrays pointers


【解决方案1】:

是的,两者都是一样的。

在这种情况下,数组的名称衰减为指向其第一个元素的指针。

因此,

p = numbers;       //Name of the array

等同于:

p = &numbers[0];   //Address of the First Element of the Array

【讨论】:

    【解决方案2】:

    是的,它们是一样的。当在右值上下文中调用数组的名称时,它会衰减为指向其第一个元素的指针。

    【讨论】:

      【解决方案3】:
      numbers[0]    is equal to     *number    and equal to *(number+0)
      numbers[x] = *(number+x)
      

      所以 &(*(number+x) ) = number+x 是第 x 个元素的地址

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 2020-06-20
        • 2018-01-04
        • 1970-01-01
        相关资源
        最近更新 更多