C++比较double和double*的值
C++ Compare values of double and 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是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
值。
- 数组索引的值没有增加
- 'short int'持有的值溢出,但"自动"不会溢出?
- 是默认情况下分配给char数组常量的值
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么我无法更改"set<set>"循环中的值<int>
- 有效地使用std::unordered_map来插入或增加键的值
- <streamsize>C++ 中 numeric_limits::max() 的值
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 无法获取webot::PositionSensor对象中位置传感器的值
- 正在将无序映射设置为无序映射的值
- 错误:无法将 "double*" 类型的值分配给类型 "double" 的实体
- 智能感知:不能将 "void" 类型的值分配给类型 "double" 的实体
- 返回时更改double的C++值
- 在C++中,将double转换为long的类型返回了不正确的值
- 使用 "double" 输出具有两位小数的值
- C++比较double和double*的值
- 从内存中提取double的字节值
- 设置Complex Double的最大值来代替Infinity
- 返回精度为double的值
- 将double的值四舍五入