2013-03-31 188 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