双指针的布尔值(存在/为空或否)

bool value for a double pointer (exists/empty or not)

本文关键字:存在 指针 布尔值      更新时间:2023-10-16

我正在读一些听起来很奇怪的代码示例:

方法参数是指向双精度的指针。在方法体中,有一个条件语句测试该参数指针是否给定(是否为空)。我想知道指针怎么会有布尔值,不存在的指针(NULL?0?)的语法是什么。

以下是方法实现:

bool OMethod::initSim(double* alpha_)
{
int i, j;
const double * cparameters = fun->getParameters();
simplex = OMatrix::allocMatrix(npts,ndim,true);
sSum = new double[ndim];
funcEvals = new double[npts]; 
double *alpha = 0;
     if(!alpha_) {
alpha = new double[ndim];
    for(i = 0; i< ndim; ++i) {
    if(cparameters[i] == 0)
        alpha[i] = 0.2f;
    else
        alpha[i] = 0.1 * cparameters[i];
        }
}
else
{
    alpha = alpha_;
}
     for(j = 0; j < npts; ++j) 
 {
    for(i = 0; i < ndim; ++i)
    sim[j][i] = cparameters[i]
      }
delete [] cparameters;
for(j = 0; j < ndim; ++j)
{
    sim[j + 1][j] += alpha[j];
}
computeS();
for(i = 0; i < npts; ++i) 
{
    funcEvals[i] = evalFunc(simplex[i]);    
    }

在C++中,指针值在布尔上下文中(例如,在if测试或!表达式中)不等于零,即不为null时,被视为"true"。因此,!alphaalpha == 0alpha == NULLalpha == nullptr相同。

它检查指针值是否为0(null)。if (alpha_)部分也可以写成if (alpha_ != 0)

示例:

int *add(int *array, int n, int *sum) {
  if (sum == 0) {
     sum = new int;
     *sum = 0;
  }
  *sum += array[0];
  if (n > 0)
     add(array+1, n-1, sum);
  return sum;
}
main() {
  int a[] =  {1,2,3};
  int *sum = 0;
  sum = add(a, 3, sum);
  // ...
  delete sum;
}

通过编写!,您可以在C++中针对0(或者在指针的情况下为NULL)测试任何值。

对于指向简单类型的普通指针,if (!pointer)等效于if (pointer==NULL)