簡體   English   中英

指針並通過引用傳遞c ++

[英]Pointers and pass by reference c++

在我的主程序中,我調用了函數compute_entropy,並給了它一個像這樣的向量:float entropy = h.compute_entropy(input_pic [0],&Symbol_table);

在實現函數本身(在h.cpp中)中,我不應更改其采用的參數,即vector * prob。如何訪問prob的數據?

float compute_entropy(vector<Symbol>* prob)
{

    float ent = 0;
    vector<Symbol>* prob;


    for (int i = 0; i < prob.size(); i++)  //GIVES ERROR
    {
        ent +=    (prob.at(i).freq)   *   log2(  1 / (prob.at(i).freq)  );
    }
}

因為prob類型是Vector<Symbol> * ,所以實際上您需要在訪問成員之前首先對其進行取消引用。 看起來像(*prob).at(i).freq

*(A).B也可以寫為A->B ,因此可以代替(*prob).at(i).freq來編寫(*prob).at(i).freq prob->at(i).freq (使用類似的參數, prob.size()變為prob.size() prob->size()

以更清潔的方式做
因為您從不更改向量的內容,所以可以使參數恆定。

float compute_entropy(const vector<Symbol>* prob)

現在我們知道指針是邪惡的 ,讓我們用引用替換指針。

float compute_entropy(const vector<Symbol> &prob)
{

    float ent = 0;

    for (int i = 0; i < prob.size(); i++)  //GIVES ERROR
    {
        ent +=    (prob.at(i).freq)   *   log2(  1 / (prob.at(i).freq)  );
    }
}

調用此函數時,如果要使用vector調用,請從參數中刪除& ,如果使用矢量指針調用,請使用*取消引用。

vector<Symbol>* prob;    
for (int i = 0; i < prob.size(); i++)  //GIVES ERROR
.....

因為prob是一個指針,所以您需要使用->運算符

for (int i = 0; i < prob->size(); i++)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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