[英]C++ arrays and pointers
我想知道是否有人可以幫我解決這個問題。 它涉及指針和數組。
double wages[3] = {10000.0, 20000.0, 30000.0};
double * pw = wages;
在上面的示例中,可以通過以下兩種方式訪問數組中的元素:
wages[1] or
*(wages+ 1)
然后我偶然發現了另一段代碼:
void fill(std::array<double, Seasons> * pa)
{
using namespace std;
for (int i = 0; i < Seasons; i++)
{
cout << "Enter " << Snames[i] << " expenses: ";
cin >> (*pa)[i];
}
}
為什么我們不能寫pa[i]
因為pa是一個指針。 與上面的示例不一樣嗎?
pa
是指向對象的指針,其類型為std::array<double, Seasons>
。
pa[i]
不會使您在std::array
獲得第i個double,它將嘗試訪問未為其分配的內存中的另一個std::array
,並且將導致未定義的行為。
(*pa)
導致對std::array
對象的引用,該對象實現operator[]
。
(*pa)[i]
調用上述對象上std::array
operator[]
。
為什么我們不能寫pa [i],因為pa是一個指針。
pa
是指向數組的指針。 因此, pa[i]
不會像您期望的那樣取消對當前數組的第i
個元素的引用-該語法的工作方式就像pa
是指針數組一樣。
(*pa)[i]
取消引用pa
指向的數組的第i
個元素。
您也可以使用pa-> at(i)而不是pa.at(i)來訪問該元素,因為pa是指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.