2013-03-31 234 views
0
class Expression 
{ 
    private: 
     ToStringDisplay* toString; 
    public: 
     ...... 
}; 

    // Some code 
    if (toString == NULL) 
    // do something 

當我調試時,toString引用了一個地址,而不是NULL。 但是,如果我聲明static ToStringDisplay* toString;而不是,toString引用NULL? 他們之間有什麼不同?靜態與非靜態變量C++

+0

以這種方式提出的這個問題太模糊/不完整。 –

+1

你可以顯示代碼在哪裏你分配toString? –

+0

你知道C中沒有類,對吧? – dtech

回答

2

作爲C/C++中的標準,如果沒有另外聲明,靜態變量總是被初始化爲空。但是,對於非靜態局部變量,不存在這樣的保證

+0

您確定靜態變量在C中被初始化爲NULL。 static int arr [5]; // arr只是5 * sizeof(int)分配數據的字節,其中包含之前發生的任何事情。我只懷疑它沒有被初始化爲null,因爲我知道靜態變量存儲在與堆棧和堆不同的內存段中。 ---雖然C++肯定會初始化爲null。 –

+0

如果靜態變量未初始化,它將包含在BSS段中。 查看更多內容:http://en.wikipedia.org/wiki/Data_segment 所以我認爲它會被初始化爲零 – DungLe