从double到double*的指针参数
Pointer argument from double to double*
我制作了一个非常基本的程序,试图更好地理解指针,但我无法理解它们。我继续得到错误"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,但我在网上看到的例子并不能解释原因。
任何关于代码或解释的帮助都非常好。谢谢
您需要对程序进行以下更改。
-
将函数的返回类型更改为
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;
我相信这已经说过十亿次了,但可以把指针变量看作一个变量。
double*只是一种类型,在32非机器上,它可以保存4字节的值。在64非机器上,有一个更大的寻址空间,所以指针更大。
那么,如果double*只是一个可以存储double的4字节地址的变量,那么它需要某个东西的地址。。。
您可以使用"&"获取其他变量的地址
示例:
double* ptr = &anotherVariable;
现在"ptr"包含一个4字节的地址,然后您可以通过取消引用双指针本身来访问变量内容。
示例:
*ptr = 4.2;
但是,"ptr"变量本身包含一个地址,因此之前分配给它的"anotherVariable"也具有值4.2
现在,如果您将一个值传递给一个函数,而函数参数是"double*temp"。您可以将变量或实际指针的地址传递给它,在函数内部,您可以执行与上面相同的操作。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 调用的对象类型 'double' 不是 report() 函数的函数或函数指针
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 从double到double*的指针参数
- 将双指针作为参数传递给需要引用 std::vector <double>的函数
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 如何为const char double指针(使用新的)动态分配内存
- 从多个来源检查NULL:共享_ptr vs double指针
- 从const doubles的指针返回指向double的指针
- 在函数 c/c++ 中传递指针时出错"double** to double*"
- 如何创建一个通用指针,它可以处理int和double变量并避免范围问题
- 用带有特定(double..)指针形参的void*函数重载函数
- 指向复杂<double>罪恶的指针
- 错误:被调用的对象类型 'double' 不是函数或函数指针
- 如何从double(*)(void)转换为具有给定参数数量的函数指针