函数除了可以不适用参数外还可以通过参数提供对外的接口来实现指定的功能,例如,我现在需要设计一个函数可以推算指定的两个数字的和,就可以使用带有参数版本的版本来进行计算,如下:
#include <iostream>
using namespace std;
void sum(int num1, int num2);
int main(){
int a1 = 1, a2 = 2;
sum(a1, a2);
return 0;
}
void sum(int sum1, int sum2){
int sum = sum1 + sum2;
cout << sum1 << "+" << sum2 << "=" << sum << endl;
}
在上述代码中,sum函数含有两个指定类型的参数,即两个int类型的参数,在sum函数内部可以将sum1和sum2作为两个已有变量使用,将其和计算出来然后再输出。在调用函数时只需要将指定的数据a1和a2传递给sum函数即可。
若是想设计一个可以改变传入的变量大小的函数则需要注意,若是直接使用原先的方法是无效的,因为原先的参数传递方法为值传递,也就是将变量中的值赋值一份到函数之中,如图:
存在两个变量a1和num1,值传递时系统会将a1中存放的值复制一份,再将复制出来的这份值赋值给num1,因此,值传递时num1和a1是值相等的两个变量,就算在函数中改变了num1的值a1的值也不会因为num1的改变而发生改变,因此,值传递无法直接改变传参的值。
为了改变传参的值C++中提供了一种方法:引用。
引用可以将其理解为起别名,使用符号&,如下:
#include <iostream>
using namespace std;
int main(){
int a = 1;
int b = a;
int& c = a;
b = 10;
cout << a << endl;
c = 10;
cout << a << endl;
return 0;
}
如上,在上述代码中,在变量c的前面加上符号&,表示c是a的引用,或者说c是a的别名,因此,c和a指的其实是同一个数据,因此改变c的大小就是改变a的大小,但是b仅仅是和a无关的另一个变量,只是值和a相同,因此改变b的大小是无法改变a的大小的。
将引用使用到函数时如下:
#include <iostream>
using namespace std;
void change(int& num);
int main(){
int num = 1;
cout << "before:" << num << endl;
change(num);
cout << "now:" << num << endl;
return 0;
}
void change(int& num){
num++;
}
在调用函数前num的值为1,调用函数后num的值变为了2