簡體   English   中英

從 const double 的指針返回指向 double 的指針

[英]returning pointers to doubles from pointers of const doubles

我正在嘗試編寫一個名為 ComputeMaximum 的函數,它有兩個參數,都是指向常量雙精度類型的指針,並返回指向雙精度類型的指針

我不斷收到以下鑄造錯誤:

  1. 從“const double*”到“double*”的無效轉換
  2. 對於參數“1”到“double* ComputeMaximum(const double*, const double*)”,無法將“double”轉換為“const double*”
#include <iostream>
using namespace std;

double *ComputeMaximum(const double *num1, const double *num2)
{
    return ((double*)num1>num2?num1:num2);  
}

int main()
{
    double *max;

    max = ComputeMaximum(6.4, 6.9);
    cout << *max;

    return 0;
}

6.4, 6.9是浮點字面量(或)常數值,不能轉為指針。 您需要的只是double作為函數的參數類型,而不是double*

指針指向位置的地址,本身不能保持價值。 所以,試試

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

如果他真的想傳遞指針並返回一個指針(想不出為什么,除非這是家庭作業)

#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;
}

你有一個無效的參數,編譯器不允許這種隱式轉換:

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轉換值,或更改方法中的聲明,或使用引用:

除了 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);  
}

您還可以使用 const_cast 將 const 值轉換為非 const 值,但這幾乎總是一個壞主意。 唯一合法的用途是與遺留庫接口,這些庫期望字符串作為非 const char 指針但實際上並不修改它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM