从double到double*的指针参数

Pointer argument from double to double*

本文关键字:double 指针 参数      更新时间:2023-10-16

我制作了一个非常基本的程序,试图更好地理解指针,但我无法理解它们。我继续得到错误"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,但我在网上看到的例子并不能解释原因。

任何关于代码或解释的帮助都非常好。谢谢

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

  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;

我相信这已经说过十亿次了,但可以把指针变量看作一个变量。

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

那么,如果double*只是一个可以存储double的4字节地址的变量,那么它需要某个东西的地址。。。

您可以使用"&"获取其他变量的地址

示例:

double* ptr = &anotherVariable;

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

示例:

*ptr = 4.2;

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

现在,如果您将一个值传递给一个函数,而函数参数是"double*temp"。您可以将变量或实际指针的地址传递给它,在函数内部,您可以执行与上面相同的操作。