2016-11-18 82 views
-5

這些代碼項目的部分:C++:初始指針

//.h文件

#ifndef IMAGEFILTER_H 
#define IMAGEFILTER_H 

#include "filter.h" 

class ImageFilter : public Filter { 
public: 
    ImageFilter(int _dimension); 
    virtual ~ImageFilter(); 
protected: 
    int* values; 
}; 
#endif // IMAGEFILTER_H 

//.cpp文件

#include "imagefilter.h" 

ImageFilter::ImageFilter(int _d) : Filter(_d) { 
    values = new int[_d * _d]; 
} 

ImageFilter::~ImageFilter() { 
    delete [] values; 
} 

我應該如何理解這一行: 「values = new int [_d * _d];」 ? 你能幫我嗎?

+0

可能是一個指向堆分配緩衝區的_d * _d * sizeof(int)個字節。或者是的,如果這不是摘錄而是完整的代碼,則是未定義的行爲。 –

+0

對不起,我的朋友們,我現在應該發佈所有相關代碼。我已經編輯了我的問題。@ songyuanyao @ Marco A @ songyuanyao –

+0

我想說你的過濾器存儲一個二維形狀的二維圖像,邊長爲_d,存儲在int數組中,通過類似「座標x,y存儲在位置x + _d * y「(或者反過來說 - 無論如何,有點奇怪的是_d不是自己存儲的)。有問題的行初始化數組。一切都清楚了嗎?順便說一句,在C++中,只要有可能,就會比數組更喜歡std :: vector。 – Aziuth

回答

1

values = new int[_d * _d];是什麼意思?

保留_d * _d動態在免費商店中排序的整數(可能每個4字節)。換句話說,您已經預留了一組integers_d * _d項目,可以在以後以多種方式使用。

+1

你正在嘗試在C++中進行圖像處理,而你甚至不知道動態數組是什麼..可能你需要從較低級別開始,找到一些很好的C++書籍(絕對沒有冒犯)。我已經回答了你的問題。 –

+1

很高興爲您及時回覆!我絕對同意你的話,我也是一隻綠色的小鳥。剛纔我用'*'作爲指針的符號,實際上,它意味着乘法。非常感謝您的建議! –