0

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

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

我在测试if(! mat)什么?

谢谢

4

3 回答 3

2

您正在检查的内容:

if (!mat)

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

仅当指针的默认值为零时,如果您已像这样声明您的指针,这将很好地工作:

double ** mat = NULL;
于 2012-09-28T06:16:18.527 回答
0
if (!mat)

几乎是一个简写

if (mat==nullptr)

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

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

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

于 2012-09-28T06:17:06.977 回答
0

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

于 2012-09-28T06:18:44.607 回答