C++比较double和double*的值

C++ Compare values of double and double*

本文关键字:double 的值 C++ 比较      更新时间:2023-10-16

我有一个类型为double *的变量,我用以下行将其初始化为0:

double* angle = 0;

然后我有一个函数,它取两个类型为const CCoordinate的变量和三个类型为double *的变量作为参数。此函数获取const CCoordinate变量所保持的值,并返回函数中执行的计算返回的三个类型为double *的变量。

编辑

上述函数的声明为:

int InverseVincenty(const CCoordinate aStartPosition,
const CCoordinate aEndPosition,
double* aDistance,
double* aAngle12,
double* aAngle21);

结束编辑

我现在正在尝试编写自己的函数,它将使用此函数来计算三个double *变量,然后对double *变量执行自己的计算。然而,我似乎试图将doubles的值与double *的值进行比较,编译器给了我一些错误,说我不能这样做。。。

我想做的计算类型包括:

if((a <= b + 5) || (a >= b -5)){
    //do something
}

其中a是CCD_ 10,b是double*

编译器告诉我,它无法从"double*"转换为"double",但我并没有试图转换任何内容,只是试图比较两个变量的值。。。这可能吗?

我本以为,由于指针指向内存中的一个地址,该地址将保存一个与另一个变量具有等效数据类型的值(即double和指向double的指针),这是可能的吗?

如果没有,有人能建议我用另一种方式来比较他们的价值观吗?

if((a <= *b + 5) || (a >= *b -5)){
    //do something
}

请注意,通过执行double* angle = 0;不是初始化变量,而是其指针(表示角度)将指向0。任何取消参考角度的尝试都会导致分割错误。

引用您的问题:

我本以为,由于指针指向内存中的一个地址,该地址将保存与另一个变量具有等效数据类型的值(即double和指向double的指针),这是可能的吗

事实并非如此。您正确地说指针指向内存中的一个地址,该地址将保存一个与其他变量具有等效数据类型的值。但是,您需要使用*运算符来取消引用指针,以访问所指向的值。你可能想看看一些介绍性指南,比如:这个

b是一个指针,因此您需要取消引用它来获取值。

if((a <= *b + 5) || (a >= *b -5))

你告诉我们关于angle的事,但以后再也不提了。上述代码要求b指向一个有效的内存地址。

您可以调用您的函数并检索结果,如下所示。

void test(double *d)
{
    *d = 5;
}
double d;
test(&d); // store result in d

或者,使用参考

void test(double& d)
{
    d = 5;
}
double d;
test(d); // store result in d

与您的函数签名一样

int InverseVincenty(const CCoordinate aStartPosition,
const CCoordinate aEndPosition,
double* aDistance,
double* aAngle12,
double* aAngle21);

看起来,函数将通过指针引用返回这三个double值。

要调用函数,只需提供三个双变量

double aDistance;
double aAngle12;
double aAngle21;

并在函数调用中提供它们的地址

InverseVincenty(aStartPosition,aEndPosition,&aDistance,&aAngle12,&aAngle21);
                                        //  ^          ^         ^
                                        // Note the address-of operators

之后,您可以像往常一样继续使用double值。