我有一个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的指针),这是可能的吗?
如果没有,有人可以提出另一种方法来比较他们的价值吗?
答案 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
值。