C++中的参数,既可以当做传入参数,也可以当做传出参数,具体要看参数的数据类型。
1)非指针,非引用类型:一定是当做传入参数;
2)指针,引用类型:既可以当做传入参数;也可以当做传出参数;甚至可以同时是传入参数,也是传出参数。
3)要看参数到底是哪种类型,要看对参数进行的操作。
a. 如果是只有读取,没有修改的,那是当传入参数的,这是可以加上 const 限定符,以防不小心修改了参数。
b. 如果只有对参数进行写入,没有读取的,那是当做传出参数的。
c. 如果对参数先进行了读取操作,然后又进行了写入操作,那么是即当传入参数也当传出参数了。
举例:
#include <iostream>
using namespace std;
// 返回 a+b
int add(int a,int b)
{
return a+b;
}
// 计算 a+b 存入 c
void add(int a,int b,int *c)
{
// c 是指针类型,只有【写入】操作,因此当做传出参数
*c = (a+b);
}
// 计算 a+b 存入 c
void add(int a,int b,int& c)
{
// c 是引用类型,只有【写入】操作,因此当做传出参数
c = (a+b);
}
// 计算 a+b 存入 c ,同时交换 a b 的值
void addAndSwap(int &a,int &b,int &c)
{
// a,b 是引用类型,这里是进行【读取】操作,因此当做【传出】 参数
// c 是引用类型,只有【写入】操作,因此当做传出参数
c = (a+b);
// 下面交换 a b 的值
int t;
// a是引用类型,这里是进行【读取】操作,因此当做【传入】 参数
t = a;
// a是引用类型,这里是进行【写入】操作,因此当做【传出】参数
// b是引用类型,这里是进行【读取】操作,因此当做【传入】参数
a = b;
// b是引用类型,这里是进行【写入】操作,因此当做【传出】参数
b = t;
// 注意:当做传入参数,参数必须保留传入是的值。
// 已经修改参数的值,那么参数不能在当做【传入】参数使用了
// 如下:a是引用类型,但 a 的值在上面已经被改变(语句:a=b)
// 因此这里 a 不算是当做【传入】参数了,因为 a 不再是传入时的值了。
t = a;
}
int main(int argc, char *argv[])
{
int a,b,c;
// a,b都是【传出】 参数
a=1,b=2;
cout<<a<<"+"<<b<<"="<<add(a,b)<<endl;
// a,b都是【传出】 参数,c是指针类型的传出参数
a=3,b=4;
add(a,b,&c);
cout<<a<<"+"<<b<<"="<<c<<endl;
// a,b都是【传出】 参数,c是引用类型的传出参数
a=5,b=6;
add(a,b,c);
cout<<a<<"+"<<b<<"="<<c<<endl;
// a,b都是即是引用类型【传入】参数,也是引用类型【传出】参数;c是引用类型的传出参数
a=7,b=8;
cout<<a<<"+"<<b<<"=";
addAndSwap(a,b,c);
cout<<c<<endl;
cout<<"After swap,a="<<a<<",b="<<b<<endl;
return 0;
}
温馨提示:内容为网友见解,仅供参考