在C/C++中,函数的实参传递给形参没有什么问题,但形参传值给实参却是值得重视的一个问题,一旦忽视,值没有传递到会影响整个程序的运行过程和结果与预期不同。
请看以下代码示例:
#include <iostream>
using namespace std;void changeVar(int myVar,int newValue)
{
myVar=newValue;
}
int main(){
int myNum=10;
changeVar(myNum,20);//本应该是20,输出结果却是10,没有使用地址传参
cout<<myNum<<endl;
return 0;
}
在上面的程序中,我们想要实现通过函数中的newValue变量赋值给main函数中的myNum变量,但是上述程序运行后的结果为10,说明根本没有改变myNum的值,如果想解决上述问题,就需要引用变量和地址值传递的办法。
解决办法:
#include <iostream>
using namespace std;
void changeVar(int* myVar,int newValue)
{
*myVar = newValue;
}
int main()
{
int myNum = 10;
changeVar(&myNum,20);//正确显示20
cout<<myNum<<endl;
return 0;
}
这次我们使用了指针(可以储存地址值的变量)和引用变量(引用变量为&变量,意思就是该变量的地址值)。我们可以看到形参myVar=&myNum,这时我们再输出myNum时就是我们想要的20了。