c ++,操纵指向数组第一个元素的指针

时间:2012-02-14 19:28:59

标签: c++ arrays pointers element

我写了一个小代码来快速解释我的问题:

    #include<iostream>
    using namespace std;

    int main()
    { int a [10] = { 200, 60, 100, 70, 0, 0, 105, 400, 450, 30};
      int *b = &a[0];
      int *c = &a[9];
      int *d = b+9;

      cout<<&b[9]<<endl
      <<c<<endl
      <<d<<endl;
    return 0;
    }

我不明白为什么我必须使用address-of运算符来获得相同的结果。更具体地说,b[9](而不是&b[9])不应该等于&a[9]b+9吗?我很困惑,因为b已经被定义为指针,b [9]也应该是一个,对我来说它指向与b+9相同的地址是有意义的。

在我的例子中,b[9]实际代表什么?

4 个答案:

答案 0 :(得分:2)

  • b是int *
  • b + 9是int *
  • *(b + 9)是int
  • b [9]是int(与上面相同)
  • &amp; b [9]是int *
  • *(&amp; b [9])是int

答案 1 :(得分:2)

根据定义,

b[9]*(b+9)。也就是说,数组运算符[]对索引和指针求和,然后取消引用该指针

所以:

b[9] == a[9]
b+9 ==  &(a[9])

都是真实的陈述。

答案 2 :(得分:1)

b[9]是数组的最后一个元素。

&b[9]是指向此元素的指针。

b + 9相当于&b[9]表单。

答案 3 :(得分:1)

数组下标运算符包含一个解除引用,这就是为什么需要使用address-of运算符来再次获取指针的原因。

根据定义,

b[9]*(b+9)相同。

相关问题