指针参数从double变为double *

时间:2018-07-13 21:38:29

标签: c++ function pointers void

我编写了一个非常基本的程序,试图更好地理解指针,但是我无法弄清楚它们。我继续收到错误'void celsius(double *)':无法将参数1从'double'转换为'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;
}

在参考了几种资源之后,我只是想不出为什么它会返回错误。我知道错误是因为无法将double转换为double *,但是我在网上看到的示例并未解释原因。

任何有关代码或说明的帮助都很棒。谢谢。

2 个答案:

答案 0 :(得分:3)

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

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

    double celsius(double*);
    
  2. 调用函数时,请确保将指针传递给double,而不是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;

答案 1 :(得分:0)

我敢肯定,这已经被说了十亿遍了,但可以认为指针变量只是一个变量。

double *只是一种类型,在32个非机器上,它可以保存4个字节的值。在64台计算机上,没有更大的寻址空间,因此指针更大。

然后,如果double *只是可以存储double的4字节地址的变量,则它需要某个地址...

您可以使用'&'

获取其他变量的地址

示例:

double* ptr = &anotherVariable;

现在'ptr'包含一个4字节的地址,然后您可以通过取消引用双指针本身来访问变量内容。

示例:

*ptr = 4.2;

但是,“ ptr”变量本身包含地址,因此之前分配给它的“ anotherVariable”也具有值4.2

现在,如果您要向函数传递值,而函数参数为“ double * temp”。您可以将变量或实际指针的地址传递给它,并且在函数内部可以执行与上述相同的所有操作。