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 函数参数类型是否必须与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?这是因为它是按值传递的,这本质上是获取变量的副本以及在函数作用域不存在。解决此问题的方法是通过引用传递,只需在类型

这可能有助于解决关于int到float转换的第一个问题:


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;