返回指向const双精度指针的双精度指针

时间:2012-07-22 13:41:23

标签: c++ pointers double const

我试着写一个名为ComputeMaximum的函数,它有两个参数,都是指向常量double的类型指针,并返回指向double的类型指针

我不断收到以下播放错误:

  1. 从'const double *'无效转换为'double *'
  2. 无法将参数'1'的'double'转换为'const double *'为'double * ComputeMaximum(const double *,const double *)'
  3. #include <iostream>
    using namespace std;
    
    double *ComputeMaximum(\2)
    {
    }
    
    int main()
    {
        double *max;
    
    
        return 0;
    }
    

5 个答案:

答案 0 :(得分:2)

6.4, 6.9是浮点文字(或)常量值,无法转换为指针。您需要的只是double作为函数的参数类型,而不是double*

指针指向位置的地址,不能保留值本身。所以,试试

double ComputeMaximum(const double num1, const double num2)
// Notice * are removed.
{
   // ....
}

答案 1 :(得分:1)

如果他真的想要传递指针并返回指针(除非这是作业,否则无法思考为什么)如果你想要const double,你需要在每次使用单词double之前输入const

#include <iostream>
using namespace std;

double *ComputeMaximum(double *num1,double *num2)
{
    return (* num1 > * num2 ?num1:num2);  // need to dereference the comparison
}

int main()
{
    double *max;
    double a = 6.4;
    double b = 6.9; // need to be variables with real adresses, literals won't work

    max = ComputeMaximum(&a, &b); // pass pointers to a and b
    cout << *max;

    return 0;
}

答案 2 :(得分:0)

你有一个无效的参数,编译器不允许这种隐式转换:

max = ComputeMaximum(6.4, 6.9);

由于头文件是:

double *ComputeMaximum(const double *num1, const double *num2)

您要么传递const double *作为参数,要么将声明更改为:

double *ComputeMaximum(const double num1, const double num2)
double *ComputeMaximum(const double &num1, const double &num2)

但是,这适用于您的情况:

double a = 6.4;
double b = 6.9;
max = ComputeMaximum(&a, &b);

如果您想要效率,您可以explicit cast值,或更改方法中的声明,或使用引用:

答案 3 :(得分:0)

替代Mahesh的好解决方案,您可以在调用ComputeMaximum函数之前将双精度存储在变量中,然后使用addressof运算符&将其位置返回到内存中。

double a = 6.4; 
double b = 6.9; 

max = ComputeMaximum(&a, &b);

但是你还需要改变你的函数来比较指向的而不是指针本身:

double *ComputeMaximum(const double *num1, const double *num2)
{
    double a = *(num1);
    double b = *(num2);

    return (double*)(a > b ? a : b);  
}

答案 4 :(得分:0)

您也可以使用const_cast将const值转换为非const值,但这几乎总是一个坏主意。唯一合法的用途是与传统库接口,这些库期望字符串作为非const char指针,但实际上并没有修改它们。