我写了一小段代码来快速解释我的问题:
#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;
}
我不明白为什么我必须使用地址运算符来获得相同的结果。更具体地说,b[9]
(而不是&b[9]
)不应该等于&a[9]
和 b+9
?我很困惑,因为 b 已经被定义为一个指针,b[9] 也应该是一个,它指向与 b+9
相同的地址对我来说很有意义。
在我的示例中,b[9]
实际上代表什么?
最佳答案
b[9]
根据定义是 *(b+9)
。也就是说,数组运算符 []
对索引和指针求和,然后取消引用该指针。
所以:
b[9] == a[9]
b+9 == &(a[9])
都是正确的陈述。
关于c++,操作指向数组第一个元素的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282994/