c++ - 从双精度到双精度的指针参数*
问题描述
我制作了一个非常基本的程序来尝试更好地理解指针,但我无法弄清楚它们。我继续收到错误'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;
}
在参考了几个资源后,我无法弄清楚为什么它会返回错误。我知道错误说这是因为它无法将双精度转换为双精度*,但我在网上看到的示例无法解释原因。
对代码或解释的任何帮助都很棒。谢谢。
解决方案
您需要对程序进行以下更改。
将函数的返回类型更改为
double
.double celsius(double*);
调用该函数时,请确保将指针传递给 a
double
,而不是 adouble
。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;
推荐阅读
- ios - OpenGL 数学 (GLM) 与 AVFoundation 冲突:对“simd_char”的调用不明确
- c# - 相同参数的加密需要不同的结果
- c - free(data) 尝试释放错误的地址
- python-3.x - 从两个列表创建最大有向图路径
- python - 在python中索引二维数组
- prestashop-1.7 - 在 Prestashop 1.7.6.1 的结帐流程中默认添加城市名称
- android - Android 10 API 29 上的 CallScreeningService getExtras NULL
- jquery - 选择新选项卡时,jQuery UI Tab 默认选项卡的内容没有被隐藏?
- asp.net-core - 通过 httpVerb 属性和“Route”属性进行路由会导致不同的路由吗?
- hadoop - 在 HDI Hadoop 集群中启用 SSL