我有一个double** mat
,我想测试它是否已经被初始化。如果没有,我为它分配内存空间。这管用吗?:
if(!mat)
{
mat = new double*[dim1];
for(int i = 0 ; i < dim1 ; i++)
mat[i] = new double[dim2];
}
我在测试if(! mat)
什么?
谢谢
我有一个double** mat
,我想测试它是否已经被初始化。如果没有,我为它分配内存空间。这管用吗?:
if(!mat)
{
mat = new double*[dim1];
for(int i = 0 ; i < dim1 ; i++)
mat[i] = new double[dim2];
}
我在测试if(! mat)
什么?
谢谢
您正在检查的内容:
if (!mat)
如果位置mat
指向的是NULL
(0)。
仅当指针的默认值为零时,如果您已像这样声明您的指针,这将很好地工作:
double ** mat = NULL;
if (!mat)
几乎是一个简写
if (mat==nullptr)
(nullptr 是 C++11 关键字;您可以使用 NULL 宏或仅使用文字 0)。
当然,这只有在“mat”实际上是用 nullptr 初始化时才有意义,例如因为它是一个全局/静态变量(这些变量会自动发生),或者你确实用 nullptr 初始化了它。
就个人而言,我不喜欢像“!mat”这样的结构。我总是使 nullptr 比较明确,因为我们在这里谈论的是指针,而不是布尔值。
在检查之前,您必须mat
使用 NULL (0) 或 nullptr(对于 c++11) 值初始化指针。if (!mat)
用真或假检查指针值。NULL 或 nullptr 始终为假值,其他为真值。它就像if (mat == NULL)
或if (mat == nullptr)