C++中如何判断一个参数是传入还是传出?
1个回答
展开全部
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)非指针,非引用类型:一定是当做传入参数;
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询