簡體   English   中英

C ++數組和指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM