Parameters 函数参数类型是否必须与C+;中的参数类型相同+;? 如果我有C++代码: void valFunc(float val) { val = 50; } int main() { int mainVal = 9; valFunc(mainVal); cout << "mainVal: " << mainVal << endl; return 0; } void valFunc(float val) { val=50; } int main() { int mainVal=9; valFunc(mainVal); cout
这可能有助于解决关于int到float转换的第一个问题:Parameters 函数参数类型是否必须与C+;中的参数类型相同+;? 如果我有C++代码: void valFunc(float val) { val = 50; } int main() { int mainVal = 9; valFunc(mainVal); cout << "mainVal: " << mainVal << endl; return 0; } void valFunc(float val) { val=50; } int main() { int mainVal=9; valFunc(mainVal); cout,parameters,arguments,Parameters,Arguments,这可能有助于解决关于int到float转换的第一个问题: C++确实关心参数类型和传递给它的值是否与强类型语言的类型相同。但是这里发生的事情是,您的整数被隐式转换为浮点,这使其合法。请通过以下方式查看此隐式数字转换表: 编辑: 因此,您的代码有两个问题。首先,您的valFunc基本上没有对mainVal变量执行任何操作,请注意,在您将其传递给函数后,值仍然是9,而没有将其赋值为50?这是因为它是按值传递的,这本质上是获取变量的副本以及在函数作用域不存在。解决此问题的方法是通过引用传递,只需在类型
C++确实关心参数类型和传递给它的值是否与强类型语言的类型相同。但是这里发生的事情是,您的整数被隐式转换为浮点,这使其合法。请通过以下方式查看此隐式数字转换表: 编辑: 因此,您的代码有两个问题。首先,您的valFunc基本上没有对mainVal变量执行任何操作,请注意,在您将其传递给函数后,值仍然是9,而没有将其赋值为50?这是因为它是按值传递的,这本质上是获取变量的副本以及在函数作用域不存在。解决此问题的方法是通过引用传递,只需在类型上添加&运算符即可:
void valFunc(float& val)
{
val = 50; // Now your mainVal is 50 :)
}
好的,关于你的第二个问题:
当我将int mainVal=9更改为float mainVal=9.0时,输出仍然是9,而不是9.0。为什么不输出为9.0
这与您的变量不是浮点值无关,更重要的是控制台打印值的方式。要使控制台将您的值打印为浮点值,您需要将iomanip头包含到项目中,并在输出值之前声明已修复
例如:
#include <iostream>
#include <iomanip>
using namespace std;
void valFunc(float& val) // Assigning the value will now persist
{
val = 50;
}
int main()
{
float mainVal = 9;
valFunc(mainVal);
cout << "mainVal: " << fixed << mainVal << endl;
return 0;
}
#包括
#包括
使用名称空间std;
void valFunc(float&val)//赋值现在将保持不变
{
val=50;
}
int main()
{
浮动mainVal=9;
valFunc(mainVal);
“谢谢你的回复。关于第二个问题,为什么输出不是9?也是,你给我的链接是C++,同样的也适用于C++吗?@ David Check我编辑我的原始答案,我希望这有帮助:”戴维如果我的答案解决了你的问题,请马克是解决。
// Displays mainVal: 50.00
cout << "mainVal: " << fixed << setprecision(2) << mainVal << endl;