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)ポインター値を true または false でチェックします。NULL または nullptr は常に false 値であり、その他は true 値です。そのようなif (mat == NULL)またはif (mat == nullptr)

于 2012-09-28T06:18:44.607 に答える