2015-08-13 66 views
0

我來自Java方面,如果你想檢查一個ArrayList中的特定條目是否被分配,你會得到ArrayList中實體的引用並檢查它是否爲空。如何檢查指針指向的對象是否爲空?

基本上我試圖完成同樣的事情。這裏是我的代碼的簡化版本:

struct node 
{ 
    int count=0; 
    int nodeval=0; 

    bool valid=false; 
}; 

bool operator==(const node* n,int val) 
{ 
    if (n->count==0&&n->nodeval==0&&n->valid==false) 
    if(val==NULL) 
     return true; 
    else 
     return false; 
} 

node* lookup(int val) 
{ 
    return &Table[val]; 
} 

int main() 
{ 
    res=somevalue; 
    node* child=lookup(res); 
    if(child==NULL) 
    { 
     //do something 
    } 
} 

這是我的理解:

  1. lookup()是否會返回我選擇位置的地址表中的數據結構。我把它存儲在孩子身上。
  2. 檢查孩子的空指針沒有意義,因爲我們返回一個適當的內存位置引用,所以我重載它。
  3. 在重載==中,我檢查每個字段是否未更改,如果它未更改,則爲'空實體'。問題是==運算符需要一個用戶定義的對象來操作。

問題

  1. 我是怎麼拿錯在前面提到的步驟?
  2. 有沒有更簡單的方法來檢查指針指向的對象是否未更改/ null?
+1

你爲什麼重載操作符?只要檢查指針是否爲NULL。不需要操作員超載。另外 - ** C++不是Java **。不要試圖模仿C++中的Java代碼或技術。 – PaulMcKenzie

+1

@PaulMcKenzie ,,當我做&表[val]我指的是位置(表0 + val)地址,這恰好是一個分配的內存,我返回它,現在這將如何幫助我檢查空值? – BigDataScholar

+0

什麼* type *是表格? – Galik

回答

1

這不是100%清楚你的問題是什麼,但我會盡力澄清一些誤解我在你的代碼中看到:

  1. lookup()可以返回null。該函數被聲明爲返回一個指針,該指針可以爲null。如果這不是一個錯誤(見下文),只需返回null。

  2. lookup()的內部,首先需要檢查Table是否實際上包含具有該索引的元素。如何做到這一點取決於Table的類型。如果它是一個普通數組,只需檢查索引是否小於元素中的大小,如果不是,則返回null。

請注意,如果您始終期望查找結果,返回的類型應該是引用而不是指針。但是,在這種情況下,您需要對無效索引進行錯誤處理。你可以聲明那些是編程錯誤,只是assert()它們是有效的。或者,你可以throw std::out_of_range("invalid index")

最後,關於你的問題「如何檢查是否一個對象指向一個指針是空的?」:答案是,如果你有一個指針Object* ptr,你只是取消引用指針*ptr和比較,爲空(即if (*ptr == 0))。然而,這要求對象的類型與null類似,這通常只是數值對象(bool,char,int,float等)和指針的情況。您的節點類的對象通常不能與null相比,並且使它們與null(使用運算符重載)相比沒有多大意義。

相關問題