我编写了一个非常基本的程序,试图更好地理解指针,但是我无法弄清楚它们。我继续收到错误'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 *,但是我在网上看到的示例并未解释原因。
任何有关代码或说明的帮助都很棒。谢谢。
答案 0 :(得分:3)
您需要对程序进行以下更改。
将函数的返回类型更改为double
。
double celsius(double*);
调用函数时,请确保将指针传递给double
,而不是double
。
temp = celsius(&value); // Use &value, not value
在函数中,您需要使用*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”。您可以将变量或实际指针的地址传递给它,并且在函数内部可以执行与上述相同的所有操作。