C ++测试矩阵是否已初始化

时间:2012-09-28 06:12:22

标签: c++ pointers memory-management matrix initialization

我有double** mat,我想测试它是否已经初始化。如果没有,我为它分配内存空间。这管用吗? :

if(!mat)
{
      mat = new double*[dim1];
      for(int i = 0 ; i < dim1 ; i++)
          mat[i] = new double[dim2];
}

我使用if(! mat)测试了什么?

感谢

3 个答案:

答案 0 :(得分:2)

你在检查什么:

if (!mat)

如果位置mat指向的是NULL(0)。

只要指针的默认值为零,如果你已经像这样声明了你的指针,那么这个工作正常:

double ** mat = NULL;

答案 1 :(得分:0)

if (!mat)

几乎是

的简写
if (mat==nullptr)

(nullptr是C ++ 11关键字;您可以使用NULL宏或只使用文字0。)

当然,这只有在“mat”实际上是用nullptr初始化时才有意义,例如因为它是一个全局/静态变量(对于这些变量自动进行jhappens),或者你用nullptr初始化它。

就个人而言,我不喜欢像“!mat”这样的结构。我总是将nullptr比较显式化,因为我们在这里讨论指针,而不是布尔值。

答案 2 :(得分:0)

在检查之前,必须使用NULL(0)或nullptr(对于c ++ 11)值初始化mat指针。 if (!mat)检查指针值是true还是false。 NULL或nullptr始终为false值,其他为true值。它就像if (mat == NULL)if (mat == nullptr)