首页 > 解决方案 > 从双精度到双精度的指针参数*

问题描述

我制作了一个非常基本的程序来尝试更好地理解指针,但我无法弄清楚它们。我继续收到错误'void celsius(double *)': cannot convert argument 1 from 'double' to 'double *'

#include <iostream>

using namespace std;

void celsius(double*);

int main() {

    double temp;
    double value;

    cout << "Enter temperature in C ";
    cin >> value;

    temp = celsius(value);

    cout << temp << endl;

    return 0;
}

void celsius(double *par) {
double tem;

tem = (1.8 * par + 32);
    return tem;
}

在参考了几个资源后,我无法弄清楚为什么它会返回错误。我知道错误说这是因为它无法将双精度转换为双精度*,但我在网上看到的示例无法解释原因。

对代码或解释的任何帮助都很棒。谢谢。

标签: c++functionpointersvoid

解决方案


您需要对程序进行以下更改。

  1. 将函数的返回类型更改为double.

    double celsius(double*);
    
  2. 调用该函数时,请确保将指针传递给 a double,而不是 a double

    temp = celsius(&value);  // Use &value, not value
    
  3. 在函数中,您需要使用*par来取消引用指针并使用它的值。

    tem = (1.8 * (*par) + 32);  // Use *par not just par
    

另一种选择是保留返回类型,但更改函数的实现。

void celsius(double *par)
{
   *par = (1.8 * (*par) + 32);
}

并将用法更改为

celsius(&value);
cout << value << endl;

推荐阅读