C++中如何判断一个参数是传入还是传出?

如题所述

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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-05
一般来讲,函数return 回来的东西是传出,函数使用的时候,实参就是传入。

但是,您也知道,有引用,与指针的情况,实参传入之后,如果在函数的改变了引用(或者指针对象)的值,那么,也实现了对实参的改变,也实现传出赋值的效果的。
第2个回答  2012-03-05
函数的形式参数可以是传入的,也可以是传入、传出兼有的;函数的返回值肯定是传出的。完毕。
第3个回答  2012-03-05
首先函数的参数肯定是传入,至于传出,看你是否要传出了~
第4个回答  2012-03-05
传入的是在函数头上面定义的,传出的是return那个位置的
相似回答