C ++比较double和double的值*

时间:2014-11-10 16:52:05

标签: c++ pointers double

我有一个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是double,b是double*

编译器告诉我它不能从'double *'转换为'double',但我不是要尝试转换任何东西,只是试图比较两个变量所持有的值......这是可能的吗?一点都没有?

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

如果没有,有人可以提出另一种方法来比较他们的价值吗?

3 个答案:

答案 0 :(得分:5)

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

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

引述您的问题:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

与功能签名一样

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值。