双指针的布尔值(存在/为空或否)
bool value for a double pointer (exists/empty or not)
我正在读一些听起来很奇怪的代码示例:
方法参数是指向双精度的指针。在方法体中,有一个条件语句测试该参数指针是否给定(是否为空)。我想知道指针怎么会有布尔值,不存在的指针(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"。因此,!alpha
与alpha == 0
、alpha == NULL
和alpha == 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)
。
相关文章:
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 构造函数 (C++) 中的 char 指针参数存在问题
- C++为什么我的指针选择排序中存在分段错误?
- 迭代时将指向differents类型的指针保存在std::向量中
- 如果模板中存在成员函数指针,如何获取该指针
- 指向类成员函数的指针中存在类型转换错误
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 是否存在将长整型转换为指针有效的情况
- C ++如何创建一个即使对象被覆盖也会持续存在的指针?
- 指向派生作品的基本指针,即使派生对象不存在
- 这个危险指针示例是否因为 ABA 问题而存在缺陷?
- 指向可能不存在的对象的指针向量
- 如果存在任何循环关系,我应该假设弱指针使用吗?
- 带有功能指针的Typedef:函数不存在
- 即使在返回值之前释放后,数据仍在指针中仍然存在
- C++尝试删除不存在的指针
- 如何使用shared_ptr确保指针的存在
- 构造函数中指针到指针的默认值存在问题
- 引用的初始化无效:指针和值之间存在差异
- 没有错误,但输出不正确.可能存在指针问题