簡體   English   中英

如何檢查指針指向的對象是否為空?

[英]How to check if an object pointed to by a pointer is null?

我來自Java方面,如果您要檢查是否分配了ArrayList的特定條目,則可以獲取ArrayList實體的引用,並檢查其是否為null。

基本上,我正在嘗試完成同樣的事情。 這是我的代碼的簡化版本:

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()將向我返回Table數據結構中選擇位置的地址。 我把它存儲在孩子中。
  2. 檢查child是否為空指針是沒有意義的,因為我們返回了內存位置的正確引用,所以我對其進行了重載。
  3. 在重載== ,我檢查每個字段是否未更改,如果不更改,則不更改,因此為“空實體”。 問題是==運算符需要一個用戶定義的對象進行操作。

問題

  1. 在上述步驟中我犯了什么錯誤?
  2. 有沒有更簡單的方法來檢查指針所指向的對象是否未更改/為空?

目前尚不清楚您的問題是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相比較(使用運算符重載)也沒有多大意義。

暫無
暫無

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

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