[英]c++, manipulating the pointer to the first element of an array
我寫了一個小代碼來快速解釋我的問題:
#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]
實際代表什么?
根據定義, b[9]
是*(b+9)
。 也就是說,數組運算符[]
將索引和指針求和,然后取消對該指針的引用 。
所以:
b[9] == a[9]
b+9 == &(a[9])
都是真實的陳述。
b[9]
是數組的最后一個元素。
&b[9]
是指向此元素的指針。
b + 9
等效於&b[9]
形式。
數組下標運算符包括一個取消引用,這就是為什么您需要使用address-of運算符再次獲取指針的原因。
b[9]
的定義與*(b+9)
相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.