[英]returning pointers to doubles from pointers of const doubles
我正在嘗試編寫一個名為 ComputeMaximum 的函數,它有兩個參數,都是指向常量雙精度類型的指針,並返回指向雙精度類型的指針
我不斷收到以下鑄造錯誤:
#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.