[英]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
}
}
這是我的理解:
lookup()
將向我返回Table數據結構中選擇位置的地址。 我把它存儲在孩子中。 ==
,我檢查每個字段是否未更改,如果不更改,則不更改,因此為“空實體”。 問題是==
運算符需要一個用戶定義的對象進行操作。 問題 :
目前尚不清楚您的問題是100%的,但是我會盡力澄清我在您的代碼中看到的一些誤解:
lookup()
可以返回null。 聲明該函數返回一個指針,該指針可以為null。 如果這不是錯誤(請參見下文),則返回null。
在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.