我写了一个小代码来快速解释我的问题:
#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]
实际代表什么?
答案 0 :(得分:2)
答案 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)
相同。